使用 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 图形对象 ax1
和 ax2
中获取图例的句柄和标签,并将它们合并到一个单独的图例中。下面逐步解释这段代码:
-
lines1, labels1 = ax1.get_legend_handles_labels()
:这一行代码从第一个图形对象ax1
中获取图例的句柄(lines1
)和标签(labels1
)。通常,图例句柄是与图形对象相关联的线条、点或其他图形元素,而标签是与图例相关联的文本描述。 -
lines2, labels2 = ax2.get_legend_handles_labels()
:这一行代码从第二个图形对象ax2
中获取图例的句柄(lines2
)和标签(labels2
),同样,这是用于第二个图形的图例信息。 -
lines = lines1 + lines2
:这一行代码将第一个图形的图例句柄列表lines1
和第二个图形的图例句柄列表lines2
合并成一个新的句柄列表lines
。这个列表包含了两个图形中所有的图例句柄。 -
labels = labels1 + labels2
:这一行代码将第一个图形的图例标签列表labels1
和第二个图形的图例标签列表labels2
合并成一个新的标签列表labels
。这个列表包含了两个图形中所有的图例标签。 -
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
决定,而图例的位置被设置为右上角。图例通常用于标识图形中不同元素的含义,使图形更容易理解。
-
综合起来,这段代码的目的是将两个图形对象中的图例信息合并成一个单独的图例,以便在同一个图形中显示两个图形的图例。这在需要在一个图形中同时显示多个图形的图例时非常有用。