使用pandas以及matplotlib画出带有表格的折线图

最近在研究如何画出带有表格数据的统计图,特此做个总结。

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
# 隐藏x轴坐标
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')

# 设置y坐标的范围
plt.ylim(-3.0, 6.0)

# 设置y轴范围带小数点
ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1f'))

color_map = {
    '同比': 'ro-',
    '环比': 'bd-'
}

# 画图
data.plot(table=True, ax=ax, style=color_map, markersize=8)
# plt.legend()

plt.show()

效果图如下:
在这里插入图片描述
当然这个效果一般,暂时不能把表格中的字体放大,如果有正在研究的小伙伴,欢迎交流~

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你好,我是 ChitGPT,可以帮你回答问题。关于在 pandas 中用 matplotlib 画两个 y 轴的折线图并给轴命名的问题,可以按以下步骤操作: 1. 首先,确保你已经安装了 pandasmatplotlib 库,在代码中引入它们: ```python import pandas as pd import matplotlib.pyplot as plt ``` 2. 读取数据并进行处理,为两个 y 轴分别创建数据和标签。 例如,我们有以下数据表,分别记录了某公司在 2019 年和 2020 年的销售量和收入情况: | 年份 | 销售量 | 收入 | | --- | --- | --- | | 2019 | 100 | 1000 | | 2020 | 120 | 1500 | 按年份分别创建两个 Series,作为折线图的 y 轴数据,同时为它们指定标签: ```python year = pd.Series([2019, 2020]) sales = pd.Series([100, 120], name='销售量') revenue = pd.Series([1000, 1500], name='收入') ``` 3. 用 matplotlib 绘制折线图,为两个 y 轴分别设置数据、标签及样式: ```python fig,ax1 = plt.subplots() # 创建一个包含两个 y 轴的图形 ax2 = ax1.twinx() # 创建第二个 y 轴 # 绘制第一个 y 轴(销售量) sales.plot(ax=ax1, style='g-', legend=True) ax1.set_ylabel('销售量') # 设置 y 轴标签 ax1.set_xlabel('年份') # 设置 x 轴标签 ax1.set_ylim(0, 150) # 设置 y 轴范围 # 绘制第二个 y 轴(收入) revenue.plot(ax=ax2, style='r-', legend=True) ax2.set_ylabel('收入') # 设置 y 轴标签 ax2.set_ylim(0, 2000) # 设置 y 轴范围 plt.show() # 显示图形 ``` 这样就可以绘制出带有两个 y 轴的折线图了。注意,原文中的“pandas”在实现多个 y 轴时并不直接介入,而是需要用到 matplotlib 的支持。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值