今天的文章讲解如何利用 Pandas 来绘图,前面写过 matplotlib 相关文章,matplotlib 虽然功能强大,但是 matplotlib 相对而言较为底层,画图时步骤较为繁琐,比较麻烦,因为要画一张完整的图表,需要实现很多的基本组件,比如图像类型、刻度、标题、图例、注解等等。目前有很多的开源框架所实现的绘图功能是基于 matplotlib 的,pandas是其中之一,对于 pandas 数据分析而言,直接使用 pandas 本身实现的绘图方法比 matplotlib 更方便简单。关于更多 Pandas 的相关知识请参考官方文档
Pandas 绘制线状图
使用 Pandas 绘制线状图代码如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltdef craw_line():ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))ts = ts.cumsum()ts.plot()plt.show()if __name__ == '__main__':craw_line()
显示结果如下:
第二种绘画线状图方式如下:
import pandas as pd
import numpy as np
import matplotlib.pyplot as pltdef craw_line1():ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))df = df.cumsum()df.plot()plt.show()if __name__ == '__main__':craw_line1()
线性图显示结果如下:
Pandas 绘制条形图
除了绘制默认的线状图,还能绘制其他图形样式,例如通过以下方法绘制条形图。绘图方法可以作为plot()的kind关键字参数提供。
绘制条形图1
通过如下方法绘制条形图1,详细代码如下:
def craw_bar():ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list("ABCD"))plt.figure()df.iloc[5].plot(kind="bar")plt.show()if __name__ == '__main__':craw_bar()
结果图显示如下:
绘制条形图2
通过如下方法绘制条形图2,详细代码如下:
def craw_bar1():#ts = pd.Series(np.random.randn(1000), index=pd.date_range("1/1/2000", periods=1000))df2 = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])df2.plot.bar()plt.show()if __name__ == '__main__':craw_bar1()
图形结果展示如下:
生成堆叠条形图
上面的条形图2可以生成堆叠条形图,加上stacked=True
参数即可,详细代码如下:
def craw_bar2():df2 = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])df2.plot.bar(stacked=True)plt.show()if __name__ == '__main__':craw_bar2()
堆叠条形图展示如下:
将以上条形图设置为水平条形图,详细代码如下:
def craw_bar3():df2 = pd.DataFrame(np.random.rand(10, 4), columns=["a", "b", "c", "d"])df2.plot.barh(stacked=True)plt.show()if __name__ == '__main__':craw_bar3()
展示结果图如下: