pandas可视化(2)【官方文档解读】-- 条形图、直方图

浏览: 7844

前言

前文传送门:pandas可视化(1)【官方文档解读】--基础绘图

如绘图过程中,中文字体和负号显示有问题,可以参照如下链接修改配置参数设置正常显示:

https://www.joinquant.com/post/441


条形图

对于标记的非时间序列数据,你可能希望生成条形图:

import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.style.use('ggplot')#使用ggplot样式
%matplotlib inline

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts = ts.cumsum()
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()

注:如前一章,先导入必要的模块和绘图的数据准备

plt.figure();
df.iloc[5].plot(kind='bar')
plt.axhline(0, color='k')

注:df.iloc[5]意思是取出df第6行(索引为5),然后绘制条形图

plt.axhline(0, color='k')指的是在y=0的位置画一条黑色的线

Clipboard Image.png

注:因为是随机产生的值绘图,你的图一般和我不一样,一样就厉害了!

Clipboard Image.png这种为图所存在的内存地址位置


df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2.plot.bar()

注:如果看了前一章,以上代码很好理解,这里同一幅图绘制多个条形图比较

Clipboard Image.png


df2.plot.bar(stacked=True)

注:将a、b、c、d数据叠加起来绘制条形图

Clipboard Image.png


df2.plot.barh(stacked=True)

注:绘制水平叠加条形图

Clipboard Image.png


直方图

df4 = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000),
'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
df4.head()

Clipboard Image.png

注:以标准正态分布为基础产生一个df4


plt.figure()
df4.plot.hist(alpha=0.5)

注:绘制直方图,alpha=0.5意思为透明度为50%

Clipboard Image.png

注:明明有三列数据,画出有六种颜色,应该是是颜色叠加出了新颜色


plt.figure()
df4.plot.hist(stacked=True, bins=20)

注:画堆积直方图(不会重叠,直观)bins=20指的是分为20个区段

图中没有显示20个因为正态分布距离中心远处取值可能心很小,可能只有个别值,在图中不明显

Clipboard Image.png


plt.figure();
df4['a'].plot.hist(orientation='horizontal', cumulative=True)

注:取出A列画横向累积直方图,采用默认10个区段

Clipboard Image.png


plt.figure()
df['A'].diff().hist()

注:diff为差分,即后一个减去前一个,我们看一下:

df['A'].diff().head()

注:显示A列中差分结果的前五个数

Clipboard Image.png

注意,第一个值不存在,因为原来的第一个数减去前面一个(第一个的前面一个数不存在),所以为NaN

差分后绘制的直方图为(默认为十个区段吧):

Clipboard Image.png


plt.figure()
df.diff().hist(color='g', alpha=0.5, bins=20)

Clipboard Image.png

注:df中四栏(4列)分别绘制一阶差分的图(绿色,半透明,分20区段),有种2x2子图的感觉


data = pd.Series(np.random.randn(1000))
data.hist(by=np.random.randint(0, 4, 1000),figsize=(6, 4))

注:这里产生1000个正态分布的随机数,然后使用hist方法中的by参数随机产生0-3中的整数(即0、1、2、3)

将原来的1000个正态分布的随机数对应上分组绘制四张图

图的长宽大小为6x4


pandas的绘图真美~~~~~~~~

pandas绘制条形图、正方图到此结束

文中所写如有谬误请指出,感谢!

参考文献

http://pandas.pydata.org/pandas-docs/stable/visualization.html#

推荐 3
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

2 个评论

加油
谢谢支持!

要回复文章请先登录注册