You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中如何将插图图例迁移至主坐标轴并复用?

解决方案

你遇到的问题是因为图例对象属于创建它的插图坐标轴,无法跨坐标轴复用。解决方法是从任意一个插图的绘图元素中提取线条对象,在主坐标轴上重新创建通用图例,具体步骤如下:

  1. 保存插图绘图时返回的线条对象,用于生成图例
  2. 在主坐标轴上创建图例,指定位置为主轴右上角
  3. 无需在任何插图中创建图例,避免重复

修改后的代码:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
import numpy as np

fig, ax = plt.subplots(1, 1)
ax.plot(range(10), range(10))

# 创建插图坐标轴
inset_ax1 = inset_axes(ax, width=1.5, height=1.5, loc='lower right')
inset_ax2 = inset_axes(ax, width=2, height=2, loc='upper left')

# 绘图时保存其中一个插图的线条对象
lines = inset_ax1.plot(range(10), np.random.rand(10,3))
# 其他插图正常绘图即可
inset_ax2.plot(range(10), np.random.rand(10,3))

# 在主坐标轴右上角创建通用图例
ax.legend(lines, ['a', 'b', 'c'], loc='upper right')

plt.show()

补充说明

  • 无论插图数量和位置如何变化,只要所有插图的线条样式一致,仅需从任意一个插图中提取线条对象即可生成通用图例
  • 如果是风玫瑰图这类特殊绘图,可通过inset_ax.get_lines()方法从插图坐标轴中提取线条对象,再用这些对象创建主坐标轴的图例

内容的提问来源于stack exchange,提问作者debsim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:01:00