[python][科学计算][pandas]简要使用教程9-快速

2019-03-18  本文已影响0人  jiedawang

最后一次更新日期: 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指定一个列作为取值绘制饼图,二是设置参数subplotsTrue,会用每个列的数据绘制子图。
figsize是绘图的通用参数,用于设置图像大小。

上一篇下一篇

猜你喜欢

热点阅读