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

如何在Matplotlib中同时添加自定义图例与默认图例

同时保留Matplotlib默认图例与自定义图例的方法

要同时保留默认生成的图例和自定义图例,核心思路是先收集默认图例的元素,再和自定义元素合并后统一生成图例,具体步骤如下:

  • 先绘制所有带label的默认图形元素(比如你用的plt.axvline)
  • 获取当前坐标轴上所有默认图例的句柄(handles)和标签(labels)
  • 定义你的自定义图例元素(Line2D或Patch)
  • 合并默认元素和自定义元素,最后调用legend()生成包含所有内容的图例

完整代码示例

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.patches import Patch

# 1. 绘制带标签的默认图形
plt.axvline(x=2, color='red', lw=2, label='Vertical Line')
plt.plot([0, 4], [0, 4], color='blue', label='Diagonal Line')

# 2. 获取默认图例的句柄和标签
ax = plt.gca()  # 获取当前坐标轴对象
default_handles, default_labels = ax.get_legend_handles_labels()

# 3. 定义自定义图例元素
custom_elements = [
    Line2D([0], [0], color='green', lw=4, label='Custom Line'),
    Line2D([0], [0], marker='o', color='w', markerfacecolor='orange', markersize=15, label='Custom Scatter'),
    Patch(facecolor='purple', edgecolor='black', label='Custom Patch')
]

# 4. 合并默认与自定义元素
all_handles = default_handles + custom_elements
all_labels = default_labels + [elem.get_label() for elem in custom_elements]

# 5. 生成包含所有内容的图例
plt.legend(handles=all_handles, labels=all_labels)

plt.show()

关键说明

  • ax.get_legend_handles_labels()会自动收集当前坐标轴上所有带有label参数的绘图元素,不管你有没有提前调用过plt.legend()
  • 合并时直接把默认句柄和自定义元素列表相加,标签同理(自定义元素的标签可以通过get_label()获取,也可以手动写)
  • 不要分开调用两次plt.legend(),那样第二次会覆盖第一次的图例,合并后只调用一次就能同时显示所有内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:50:09