返回

Matplotlib 中为多个子图创建单个图例:解决同类信息可视化的难题

python

在 Matplotlib 中为多个子图创建单个图例

问题:

当你在 Matplotlib 中使用多个子图可视化同类信息(例如,不同国家的折线图)时,可能需要为所有子图添加一个统一的图例。

解决方案:

创建一个 Figure 和多个 Axes 对象,然后为每个子图添加数据。创建一个 Line2D 对象作为图例句柄,最后使用 figure.legend() 函数将图例句柄添加到 Figure 中。

步骤:

  1. 创建 Figure 和 Axes 对象:

    fig, axes = plt.subplots(3, 3, sharex=True, sharey=True)
    
  2. 添加数据到子图:

    for i in range(3):
        for j in range(3):
            axes[i, j].plot(range(10), range(10), label=f"Line {i*3+j}")
    
  3. 创建图例句柄:

    handles, labels = axes[0, 0].get_legend_handles_labels()
    
  4. 添加图例:

    fig.legend(handles, labels, loc='center left')
    

代码示例:

import matplotlib.pyplot as plt

# 创建 Figure 和 Axes 对象
fig, axes = plt.subplots(3, 3, sharex=True, sharey=True)

# 添加数据到子图
for i in range(3):
    for j in range(3):
        axes[i, j].plot(range(10), range(10), label=f"Line {i*3+j}")

# 创建图例句柄
handles, labels = axes[0, 0].get_legend_handles_labels()

# 添加图例
fig.legend(handles, labels, loc='center left')

plt.show()

注意事项:

  • 所有子图必须具有相同的折线。
  • 使用 loc 参数指定图例的位置(例如,'center left')。
  • 如果子图具有不同的 y 轴范围,需要为每个子图单独创建图例。

常见问题解答:

  1. 为什么我的图例不显示?

    • 确保所有子图都具有相同的折线。
    • 确保你使用了 figure.legend() 函数。
  2. 如何更改图例的位置?

    • 使用 loc 参数指定图例的位置(例如,'center left')。
  3. 如何为每个子图创建单独的图例?

    • 对于具有不同 y 轴范围的子图,需要为每个子图单独创建图例。
  4. 如何添加标题到图例?

    • 使用 title 参数向图例添加标题。
  5. 如何使图例透明?

    • 使用 facecolor='none' 参数使图例透明。