最后一次更新日期: 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]: <matplotlib.axes._subplots.AxesSubplot at 0x2aefe00ddd8>
参数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]: <matplotlib.axes._subplots.AxesSubplot at 0x2aeff4f17b8>
参数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]: <matplotlib.axes._subplots.AxesSubplot at 0x2aefff32080>
参数alpha
设置透明度,参数stacked
设置是否堆叠,参数bins
设置分箱数。
配合diff
可以绘制按列拆分为子图的直方图:
In [165]: df.diff().hist(bins=4)
Out[165]:
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000002AE805A4748>,
<matplotlib.axes._subplots.AxesSubplot object at 0x000002AE805E3D68>],
[<matplotlib.axes._subplots.AxesSubplot object at 0x000002AE80615390>,
<matplotlib.axes._subplots.AxesSubplot object at 0x000002AE8063DA20>]],
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]: <matplotlib.axes._subplots.AxesSubplot at 0x2aeff644080>
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]: <matplotlib.axes._subplots.AxesSubplot at 0x2ae81a82e48>
参数
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]: <matplotlib.axes._subplots.AxesSubplot at 0x2ae81f66cf8>
In [206]: df.plot.pie(subplots=True,figsize=(8.5,4))
Out[206]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x000002AE8171BEB8>,
<matplotlib.axes._subplots.AxesSubplot object at 0x000002AEFFFD78D0>],
dtype=object)
有两种绘制方式,一是参数y
指定一个列作为取值绘制饼图,二是设置参数subplots
为True
,会用每个列的数据绘制子图。
figsize
是绘图的通用参数,用于设置图像大小。
网友评论