如何在Matplotlib图表中添加额外图例?
在Matplotlib中添加额外图例的方法
对于新手来说,Matplotlib默认的自动图例确实只能对应绘图数据,要加额外的自定义图例其实很简单——核心就是手动创建「虚拟的绘图元素」,然后单独生成一个新图例,同时保留原来的自动图例。
完整代码示例
先看一个可直接运行的例子,看完就懂了:
import matplotlib.pyplot as plt import numpy as np # 1. 先绘制带自动图例的基础图表 x = np.linspace(0, 10, 100) plt.plot(x, np.sin(x), label='正弦曲线') plt.plot(x, np.cos(x), label='余弦曲线') # 保存自动生成的图例对象,别直接plt.legend()完事 auto_legend = plt.legend(loc='upper right') # 2. 创建自定义图例的「虚拟元素」 # 这些元素不会出现在图表里,只用来做图例条目 # 比如做一条虚线+标记的条目 line_item = plt.Line2D([], [], color='gray', linestyle='--', marker='o', label='数据范围: 0-10') # 纯文字的条目可以用无颜色的线条 text_item = plt.Line2D([], [], color='none', label='模拟测试数据') # 还可以做色块条目(需要导入Patch) from matplotlib.patches import Patch patch_item = Patch(color='orange', label='异常值区域') # 3. 获取当前图表的轴对象,把自动图例先绑定到轴上(防止被新图例覆盖) ax = plt.gca() ax.add_artist(auto_legend) # 4. 添加第二个自定义图例,指定要显示的条目和位置 ax.legend(handles=[line_item, text_item, patch_item], loc='lower right') plt.show()
关键步骤拆解
- 保存自动图例:用
auto_legend = plt.legend()把自动生成的图例存成变量,后面要用到。 - 创建虚拟元素:
- 用
plt.Line2D([], [], ...)做线条类的图例条目,参数里的color(颜色)、linestyle(线型)、marker(标记)控制样式,label是图例显示的文字。 - 用
Patch做色块类的条目,适合标注区域、类别颜色。
- 用
- 绑定自动图例:用
ax.add_artist(auto_legend)把第一个图例固定在轴上,不然新的图例生成后会把旧的覆盖掉。 - 生成自定义图例:调用
ax.legend(handles=..., loc=...),handles里放你创建的所有虚拟元素,loc指定图例位置(比如upper left、lower center)。
注意事项
- 图例位置尽量选不遮挡数据的地方,也可以用
bbox_to_anchor参数手动调整位置,比如ax.legend(handles=..., bbox_to_anchor=(1.05, 1), loc='upper left')可以把图例放在图表外面。 - 如果只需要纯文字的额外说明,直接用
plt.text()在图表空白处加文字也是一种简单办法,但用图例的话样式更统一。
内容的提问来源于stack exchange,提问作者MRF
相关产品推荐
相关产品推荐

