最后一次更新日期: 2019/3/17
pandas是基于numpy的数据分析库,提供一些更易用的数据模型和大量高效的统计方法。
使用前先导入模块:
import pandas as pd
按需导入以下模块:
import numpy as np
import matplotlib.pyplot as plt
准备好pandas数据对象就可以调用方法直接绘图,pandas提供的快速绘图只适用于单次绘图,不便于构建复杂的图表,如有需要,使用matplotlib的方法创建图像和子图。
1. 曲线图
In [30]: df=pd.DataFrame({'a':[1,1.5,2.5,4],'b':[3,2.1,3.2,1],'c':[1,2,3,4]})
In [53]: fig=plt.figure(figsize=(12,4))
...:
...: ax1=fig.add_subplot(1,2,1)
...: df.plot.line(ax=ax1)
...:
...: ax2=fig.add_subplot(1,2,2)
...: df.plot.line(x='c',y=['a','b'],ax=ax2)
...:
...: #plt.show()
Out[53]:
参数x设置作为x轴数据的列名(只能一个),参数y设置作为y轴数据的列名/列名列表,参数ax设置子图对象,默认None单独绘制。
plt.figure用于创建图像,figsize用于设置图像大小,tuple类型,格式为(weight,height);
Figure.add_subplot用于创建子图,第一个参数设置纵向分区个数,第二个参数设置横向分区个数,第三个参数设置是第几个子图,是按分区先横后纵排列的;
plt.plot用于显示绘制好的图像,在当前场景下可以省略,ipython调用完pandas的绘图方法后会直接显示。
绘制曲线图也可以使用plot(kind='line'),参数kind也可以省略,因为默认值就是'line'。
2. 条形图
In [30]: df=pd.DataFrame({'a':[1,1.5,2.5,4],'b':[3,2.1,3.2,1],'c':[1,2,3,4]})
In [147]: fig=plt.figure(figsize=(12,4))
...:
...: ax1=fig.add_subplot(1,2,1)
...: df.plot.bar(ax=ax1)
...:
...: ax2=fig.add_subplot(1,2,2)
...: df.plot.bar(stacked=True,ax=ax2)
Out[147]:
参数stacked设置条形图是否堆叠。
水平条形图需要改用DataFrame.plot.barh方法。
3. 直方图
In [205]: df=pd.DataFrame({'a':[1,2,2,3],'b':[3,3,3,4],'c':[1,2,3,4]})
In [210]: fig=plt.figure(figsize=(12,4))
...:
...: ax1=fig.add_subplot(1,2,1)
...: df.plot.hist(alpha=0.5,ax=ax1)
...:
...: ax2=fig.add_subplot(1,2,2)
...: df.plot.hist(stacked=True,bins=4,ax=ax2)
Out[210]:
参数alpha设置透明度,参数stacked设置是否堆叠,参数bins设置分箱数。
配合diff可以绘制按列拆分为子图的直方图:
In [165]: df.diff().hist(bins=4)
Out[165]:
array([[,
],
[,
]],
dtype=object)
4. 箱线图
In [166]: df = pd.DataFrame(np.random.rand(10, 4),columns=['A','B','C','D'])
In [167]: df.plot.box()
Out[167]:
5. 散点图
In[185]: df=pd.DataFrame(np.random.rand(50,3),columns=['a','b','c'])
In[186]: fig=plt.figure(figsize=(12,4))
...:
...: ax1=fig.add_subplot(1,2,1)
...: df.plot.scatter(x='a',y='b',s=df['c']*200,ax=ax1)
...:
...: ax2=fig.add_subplot(1,2,2)
...: df[df['c']>=0.5].plot.scatter(x='a',y='b',color='b',label='c1',ax=ax2)
...: df[df['c']<0.5].plot.scatter(x='a',y='b',color='g',label='c2',ax=ax2)
Out[186]:
参数x设置作为x轴数据的列名(只能一个),参数y设置作为y轴数据的列名(只能一个),参数s设置点的大小,参数color设置点的颜色,参数label设置标签,需要为每个类别绘制不同颜色的点时,筛选出每个类别的数据分别绘制到同一个子图上,并指定颜色和标签。
6. 饼图
In [203]: df=pd.DataFrame(2*np.random.rand(3,2),index=['a','b','c'],columns=['p1','p2'])
In [204]: df.plot.pie(y='p1',figsize=(4,4))
Out[204]:
In [206]: df.plot.pie(subplots=True,figsize=(8.5,4))
Out[206]:
array([,
],
dtype=object)
有两种绘制方式,一是参数y指定一个列作为取值绘制饼图,二是设置参数subplots为True,会用每个列的数据绘制子图。
figsize是绘图的通用参数,用于设置图像大小。