Matplotlib中如何将插图图例迁移至主坐标轴并复用?
解决方案
你遇到的问题是因为图例对象属于创建它的插图坐标轴,无法跨坐标轴复用。解决方法是从任意一个插图的绘图元素中提取线条对象,在主坐标轴上重新创建通用图例,具体步骤如下:
- 保存插图绘图时返回的线条对象,用于生成图例
- 在主坐标轴上创建图例,指定位置为主轴右上角
- 无需在任何插图中创建图例,避免重复
修改后的代码:
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
相关产品推荐
相关产品推荐

