简介
Pandas自身也提供了作图的 plot() 方法,可以作各种图形。本文将详细介绍如何使用Pandas直接作一些常规的图。
折线图
控制作图的类型在 DataFrame.plot() 方法里:
1 2 3 4 5 |
DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None, sharey=False, layout=None, figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, table=False, yerr=None, xerr=None, secondary_y=False, sort_columns=False, **kwds) |
可以看出DataFrame的中的 plot() 方法是一个非常高级的API,可调节的参数非常多、使用非常灵活,这也是pandas作为数据处理工具的强大体现。通过参数 x 和 y 能够指定作图的横纵轴;通过 kind 参数指定需要的图形,这个参数可以选择的值有:
- ‘line’ : 直线图 (默认)
- ‘bar’ : 垂直条形图
- ‘barh’ : 水平条形图
- ‘hist’ : 直方图
- ‘box’ : 箱型图
- ‘kde’ : 核密度估计图
- ‘density’ : 与核密度估计图类似
- ‘area’ : 区域图
- ‘pie’ : 饼图
- ‘scatter’ : 散点图
- ‘hexbin’ : 六边形分箱图
值得注意的是,在新版本的pandas中也可以使用诸如 plot.line() 方法调用相关的作图方法了。
直接来看一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# 导入需要的库 >>>import pandas as pd >>>import numpy as np >>>import matplotlib.pyplot as plt # 定义一个DataFrame >>>df = pd.DataFrame(np.random.randn(100, 3), columns=['A', 'B', 'C']) >>>df.cumsum() #累积求和 A B C 0 -1.390429 0.301102 -0.659243 1 -0.195243 -0.825847 -0.068817 2 -0.334314 -0.575144 -1.146362 3 0.564307 0.073548 1.419107 4 -0.323652 0.779866 0.820501 5 0.731471 2.392268 1.674016 6 -0.358689 -0.731527 -0.380429 7 -0.819928 0.238729 0.865254 8 0.243721 1.317133 0.743984 9 -0.214877 0.663440 0.800653 10 -0.793498 0.164130 -0.839115 11 -0.398866 -1.517121 0.788057 12 0.744834 0.543415 0.462570 13 1.174500 -0.302651 0.388262 14 -0.683200 2.075280 1.141336 15 0.662582 -0.358390 -0.057708 16 0.326971 0.978013 0.034560 17 -0.148488 -0.170256 1.429408 18 0.772321 0.393312 0.248589 19 -0.720161 1.323384 -1.482325 20 0.051985 0.354218 -1.139217 21 -0.795822 0.570917 1.064519 22 0.677833 -0.763512 -0.255530 23 2.369977 1.124230 0.283023 24 0.710186 0.384634 -0.426938 25 -0.417719 -1.153202 0.769669 26 -0.010357 1.237234 -1.572733 27 1.469757 0.120891 -1.507504 28 -0.024829 -1.022276 -1.009701 29 0.693116 -0.620743 0.913808 .. ... ... ... 70 1.045025 1.280145 1.523409 71 -0.921893 -0.683112 -0.525018 72 -1.458108 0.917679 -0.728754 73 1.966492 0.421555 -1.255236 74 0.541505 -1.019659 -0.817549 75 0.973641 -1.437847 1.291807 76 -0.297790 -0.129589 0.712545 77 0.729158 -1.801783 0.315075 78 1.579405 -0.555476 -0.521362 79 -1.298269 -0.108276 0.208415 80 -0.032494 -0.219419 0.072550 81 0.928107 -0.157164 -0.601375 82 0.143140 0.571646 -0.204032 83 0.841268 0.334995 -0.391680 84 -0.359113 0.318038 0.496818 85 -1.445513 0.420391 -0.807184 86 1.370896 2.734003 1.213543 87 0.520353 -0.632354 0.324827 88 -0.662015 -2.154534 -2.059343 89 -0.163696 -0.291418 -1.494405 90 -1.471143 0.220470 -0.732425 91 1.928244 -0.196283 2.143498 92 0.248397 -0.606520 2.270889 93 -0.081638 0.806390 -0.256447 94 1.031751 0.097771 -1.628005 95 0.532720 -1.312519 -0.808012 96 -0.221058 0.561338 -0.070290 97 0.126138 0.031958 -0.288304 98 -1.046657 -0.137803 -0.243470 99 1.604708 -0.829743 -1.290130 [100 rows x 3 columns] >>>df.plot() >>>plt.show() |
我们来详细分析一下上面的例子,首先导入了所需要的库。要注意的是 import matplotlib.pyplot as plt 是为了最后能通过 plt.show() 将图形显示出来。接着定义了一个DataFrame,包括 'A', 'B', 'C' 三列,然后直接调用 df.plot() 画图方法, 默认对所有列作折线图,并且以索引作为 x 轴。得到的图形如下:
或者可以指定 x 轴:
1 2 |
>>>df.plot(x='A') >>>plt.show() |
得到以 A 列为横坐标,其他列都作为纵坐标的图形:
这给了我们启发,事实上对于有多列的DataFrame而言,可以引入 x, y 参数指定要作图的数据。比如:
1 2 |
>>>df.plot(x='A', y='B') >>>plt.show() |
在这里指定了 A 列为横坐标, B 列为纵坐标,得到图形如下:
散点图
这是作折线图的情况,如果我们想作散点图,就需要调用散点图的方法:
1 2 3 4 |
>>>df.plot(kind='scatter', x='A', y='B', color='r') # 或者 >>>df.plot.scatter(x='A', y='B', color='r') >>>plt.show() |
得到的散点图如下:
如果需要将 C 列也作到同一张图里,方法稍有不同:
1 2 3 |
>>>ax1 = df.plot.scatter(x='A', y='B', color='r', label='scatter1') >>>df.plot.scatter(x='A', y='C', color='g', label='scatter2', ax=ax) >>>plt.show() |
解释下:首先作完第一张图后赋值给自变量 ax1 ,表示这张图的坐标轴。作第二张图的时候,通过 ax 参数指定要作到自变量 ax1 中去。得到的散点图如下:
可以看出,与Matplotlib直接作图不同,只要定义好了 label ,这里直接加上了图例。
条形图
掌握了前面的方法后,作其他类型的图就是大同小异了,这里再介绍条形图的画法:
1 2 3 4 |
>>>df = pd.DataFrame({'lab':['A', 'B', 'C'], 'val':[10, 30, 20]}) >>>df.plot.bar(x='lab', y='val', color='orange', rot=0) <matplotlib.axes._subplots.AxesSubplot at 0x24082511518> >>>plt.show() |
在这个例子中,我们指定了以 lab 列作为横坐标, val 列作为纵坐标,填充的颜色为 orange ,旋转角度为0 。最后得到的条形图如下:
这里只介绍这几种图形,其他图形的使用方法大同小异。清楚使用DataFrame中哪些数据作图最关键。
总结
pandas提供了高级的作图接口,可以非常方便地作出图形。需要注意的是本文并不涉及作图的详细参数,这部分内容在Matplotlib教程中会详细讲到。