Python绘制双坐标图

使用 Python 绘制双坐标图,代码及结果显示如下。

import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,6))
#显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
ax1 = fig.add_subplot(111)
ax1.plot(df['yearmonth'], df['new'],)
ax1.set_ylabel('每月新增投资者数目(单位:万户)',fontdict={'weight': 'normal', 'size': 15})
ax1.set_title("投资者用户数统计",fontdict={'weight': 'normal', 'size': 15})

ax2 = ax1.twinx()  # this is the important function
ax2.plot(df['yearmonth'], df['total'], 'r')
ax2.set_ylabel('总投资者数目(单位:万户)',fontdict={'weight': 'normal', 'size': 15})
ax2.set_xlabel('Same')
#参数rotation设置坐标旋转角度,参数fontdict设置字体和字体大小
ax1.set_xticklabels(df['yearmonth'],rotation=90,fontdict={'weight': 'normal', 'size': 15})

plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import pandas as pd

# 创建示例数据
data = {
    'yearmonth': ['202201', '202202', '202203', '202204', '202205'],
    'new': [10, 15, 12, 18, 20],
    'total': [100, 120, 132, 150, 170]
}

df = pd.DataFrame(data)

# 创建图形
fig = plt.figure(figsize=(10, 6))
plt.rcParams['font.sans-serif'] = ['SimHei']

ax1 = fig.add_subplot(111)
ax1.plot(df['yearmonth'], df['new'])
ax1.set_ylabel('每月新增投资者数目(单位:万户)', fontdict={'weight': 'normal', 'size': 15})
ax1.set_title("投资者用户数统计", fontdict={'weight': 'normal', 'size': 15})

ax2 = ax1.twinx()  # 创建第二个 y 轴
ax2.plot(df['yearmonth'], df['total'], 'r')
ax2.set_ylabel('总投资者数目(单位:万户)', fontdict={'weight': 'normal', 'size': 15})
ax2.set_xlabel('Same')

ax1.set_xticklabels(df['yearmonth'], rotation=90, fontdict={'weight': 'normal', 'size': 15})

plt.show()

双坐标图:合并图例

# 合并图例
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
lines = lines1 + lines2
labels = labels1 + labels2

ax1.legend(lines, labels, loc='upper right')

代码解读如下:

这段代码是用于从两个 Matplotlib 图形对象 ax1ax2 中获取图例的句柄标签,并将它们合并到一个单独的图例中。下面逐步解释这段代码:

  1. lines1, labels1 = ax1.get_legend_handles_labels():这一行代码从第一个图形对象 ax1 中获取图例的句柄lines1)和标签labels1)。通常,图例句柄是与图形对象相关联的线条、点或其他图形元素,而标签是与图例相关联的文本描述。

  2. lines2, labels2 = ax2.get_legend_handles_labels():这一行代码从第二个图形对象 ax2 中获取图例的句柄(lines2)和标签(labels2),同样,这是用于第二个图形的图例信息。

  3. lines = lines1 + lines2:这一行代码将第一个图形的图例句柄列表 lines1 和第二个图形的图例句柄列表 lines2 合并成一个新的句柄列表 lines。这个列表包含了两个图形中所有的图例句柄。

  4. labels = labels1 + labels2:这一行代码将第一个图形的图例标签列表 labels1 和第二个图形的图例标签列表 labels2 合并成一个新的标签列表 labels。这个列表包含了两个图形中所有的图例标签。

  5. ax1.legend(lines, labels, loc='upper right')这行代码是用于在 Matplotlib 图形中添加图例(legend)的操作。

    • ax1.legend(lines, labels, loc='upper right'):这行代码使用了 ax1,它代表了一个 Matplotlib 图形对象,以及之前合并得到的图例句柄列表 lines 和标签列表 labels。这是用来创建图例的关键部分。

    • loc='upper right':这是一个可选参数,指定了图例的位置。在这里,loc 被设置为 'upper right',表示图例将位于图形的右上角。你可以根据需要选择不同的位置,例如 'upper left''lower right''center' 等。

    • 总之,这行代码的作用是在 ax1 图形中添加一个图例,图例的内容由之前获取的图例句柄列表 lines 和标签列表 labels 决定,而图例的位置被设置为右上角。图例通常用于标识图形中不同元素的含义,使图形更容易理解。

综合起来,这段代码的目的是将两个图形对象中的图例信息合并成一个单独的图例,以便在同一个图形中显示两个图形的图例。这在需要在一个图形中同时显示多个图形的图例时非常有用。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值