6.2 pandas
pandas 通过提供一个可以作用于序列和数据框的函数 plot,简化了基于序列和数据框中的数据创建图表的过程。plot 函数默认创建折线图,你还可以通过设置参数 kind 创建其他类型的图表。
例如,除了使用 matplotlib 创建标准统计图,还可以使用 pandas 创建其他类型的统计图,比如六边箱图(hexagonal bin plot)、矩阵散点图、密度图、Andrews 曲线图、平行坐标图、延迟图、自相关图和自助抽样图。如果要向统计图中添加第二 y 轴、误差棒和数据表,使用 pandas 可以很直接地实现。
为了说明在 pandas 中创建统计图的方法,我们通过下面的脚本 pandas_plots.py 来演示如何使用数据框中的数据创建一对条形图和箱线图,并将它们并排放置:
1 #!/usr/bin/env python3 2 import pandas as pd 3 import numpy as np 4 import matplotlib.pyplot as plt 5 plt.style.use('ggplot') 6 fig, axes = plt.subplots(nrows=1, ncols=2) 7 ax1, ax2 = axes.ravel() 8 data_frame = pd.DataFrame(np.random.rand(5, 3), 9 index=['Customer 1', 'Customer 2', 'Customer 3', 'Customer 4', 'Customer 5'], 10 columns=pd.Index(['Metric 1', 'Metric 2', 'Metric 3'], name='Metrics')) 11 data_frame.plot(kind='bar', ax=ax1, alpha=0.75, title='Bar Plot') 12 plt.setp(ax1.get_xticklabels(), rotation=45, fontsize=10) 13 plt.setp(ax1.get_yticklabels(), rotation=0, fontsize=10) 14 ax1.set_xlabel('Customer') 15 ax1.set_ylabel('Value') 16 ax1.xaxis.set_ticks_position('bottom') 17 ax1.yaxis.set_ticks_position('left') 18 colors = dict(boxes='DarkBlue', whiskers='Gray', medians='Red', caps='Black') 19 data_frame.plot(kind='box', color=colors, sym='r.', ax=ax2, title='Box Plot') 20 plt.setp(ax2.get_xticklabels(), rotation=45, fontsize=10) 21 plt.setp(ax2.get_yticklabels(), rotation=0, fontsize=10) 22 ax2.set_xlabel('Metric') 23 ax2.set_ylabel('Value') 24 ax2.xaxis.set_ticks_position('bottom') 25 ax2.yaxis.set_ticks_position('left') 26 plt.savefig('pandas_plots.png', dpi=400, bbox_inches='tight') 27 plt.show()
第 6 行代码创建了一个基础图和两个并排放置的子图。第 7 行代码使用 ravel 函数将两个子图分别赋给两个变量 ax1 和 ax2,这样我们就不必使用行和列的索引(例如,axes[0,0] 和 axes[0,1])来引用子图了。
第 11 行代码使用 pandas 的 plot 函数在左侧子图中创建了一个条形图。第 12 和 13 行代码使用 matplotlib 的函数来设置 x 轴和 y 轴标签的旋转角度和字体大小。
第 18 行代码为箱线图单独创建了一个颜色字典。第 19 行代码在右侧子图中创建了一个箱线图,使用 colors 变量为箱线图各部分着色,并将离群点的形状设置为红色圆点。
脚本生成的条形图和箱线图如图 6-6 所示。你可以在 pandas 绘图文档(http://Pandas.pydata.org/Pandas-docs/stable/visualization.html)中学习到创建和设置统计图表的更多信息。
图 6-6:pandas 生成的并排放置的条形图和箱线图
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论