返回

双轴图中添加图例:解决图例缺失难题

python

在双轴图中优雅地添加图例

问题:图例中的缺失

在绘制双轴图时,你可能会遇到一个令人头疼的问题:第二个 y 轴的标签无法显示在图例中。这是因为 twinx() 方法创建了一个新的轴,它与主轴共享 x 轴,但拥有独立的 y 轴。

解决方案:双轴图例的魔法

为了解决这个难题,你需要一个咒语:

  1. 绘制所有数据: 首先,绘制你想要显示的所有数据,并确保为每个序列指定标签。

  2. 创建双轴:twinx() 方法召唤第二个 y 轴。它将与主轴共享 x 轴,但拥有自己的 y 轴刻度。

  3. 添加图例: 现在,施展 legend() 魔法。将 handles 参数设置为包含所有要显示在图例中的线条句柄的列表。

  4. 添加第二个 y 轴的句柄: 为了让第二个 y 轴的标签出现在图例中,使用 twinx() 方法返回的第二个轴对象。

代码咒语

以下代码将释放双轴图例的魔力:

import numpy as np
import matplotlib.pyplot as plt

# 绘制数据
time = np.linspace(0, 24, 100)
Swdown = np.sin(time)
Rn = np.cos(time)
temp = np.random.rand(100)

# 创建双轴图
fig, ax = plt.subplots()
ax.plot(time, Swdown, label="Swdown")
ax.plot(time, Rn, label="Rn")
ax2 = ax.twinx()
ax2.plot(time, temp, color='r', label="Temp")

# 添加图例
handles1, labels1 = ax.get_legend_handles_labels()
handles2, labels2 = ax2.get_legend_handles_labels()
ax.legend(handles1 + handles2, labels1 + labels2, loc=0)

# 完善图表
ax.set_xlabel("Time (h)")
ax.set_ylabel("Radiation (MJ/m2/d)")
ax2.set_ylabel("Temperature (°C)")
plt.show()

FAQ

1. 为什么要使用双轴?
双轴允许你在同一图表中绘制具有不同 y 轴刻度的不同数据集。这在比较不同范围或单位的数据时非常有用。

2. twinx() 方法是如何工作的?
twinx() 方法创建一个新的轴,该轴共享 x 轴,但具有独立的 y 轴。这允许你在同一图表中绘制不同 y 轴刻度的两个或更多数据集。

3. 如何为第二个 y 轴添加刻度?
可以使用 twinx() 方法返回的轴对象的 set_yticks()set_yticklabels() 方法。

4. 双轴图有什么局限性?
双轴图可能难以阅读,因为第二个 y 轴刻度可能难以定位和解释。

5. 除了双轴之外,还有其他方法可以显示具有不同 y 轴刻度的多个数据集吗?
可以使用子图或共享轴来显示具有不同 y 轴刻度的多个数据集。

结语

掌握了这个咒语,你就可以在双轴图中轻松添加图例,让你的数据可视化更清晰、更全面。