最近在研究如何画出带有表格数据的统计图,特此做个总结。
1. 明确目的
我们最终需要画出下图: 通过图片可以看到,该图中的折线图特点如下:
- 带有表格数据,且在下方;
- 图中有中文显示;
- 不含纵坐标,且横轴起点在0;
- 纵坐标不含刻度线,且范围设定为(-3.0,6.0)带小数点一位展示;
- 四周不含边界线;
- 折线图有颜色和点的形状设定;
- 图例在表格的index上(这点暂时未能实现,如果有会的小伙伴,烦请告知,不胜感谢!)
2.导入模块
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as mtick
3.显示中文设置
plt.rcParams['font.family'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
SimHei是黑体,也可以选择自己喜欢的字体
4.读取数据或者创建数据
我这里是自己手敲的
data = pd.DataFrame([[2.0, 1.8, 0.9, 0.1, 1.0,0.3, 0.7, 1.3, 1.6, 1.9, 1.7,1.5, 1.2],
[0.3, 0.5, -0.3, -0.7, 0.8, 1.0, 1.0, -0.6, -0.3, -0.2, -0.2, 0.4, -0.1]],
columns=['2020年8月','9月','10月','11月', '12月','2021年1月','2月','3月', '4月','5月','6月'
,'7月', '8月'], index=['同比','环比'])
5.开始画图
fig, ax = plt.subplots(1, 1, figsize=(7, 6.5))
data = data.T
ax.axes.xaxis.set_visible(False)
ax.tick_params(left=False)
ax.spines['right'].set_color('none')
ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['bottom'].set_color('b')
plt.ylim(-3.0, 6.0)
ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1f'))
color_map = {
'同比': 'ro-',
'环比': 'bd-'
}
data.plot(table=True, ax=ax, style=color_map, markersize=8)
plt.show()
效果图如下: 当然这个效果一般,暂时不能把表格中的字体放大,如果有正在研究的小伙伴,欢迎交流~
|