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

如何通过多次plot调用迭代构建Matplotlib组合图例并显示全部条目?

解决Matplotlib组合图例条目重复覆盖问题

你遇到的问题根源是每次调用ax.legend()都会完全替换掉之前的图例,最后一次调用自然就只显示最后一组的条目。要让所有组合条目都保留,只需要在每次绘制时,把新的线条+填充块组合追加到现有图例中,而不是直接重置图例。

修改后的代码如下:

import numpy as np
import matplotlib.pyplot as plt

def plot(x, y, ax, col, group, **kwargs):
    # 绘制线条,保留虚线样式,颜色用指定的col
    hline, = ax.plot(x, y, '--', color=col)
    # 绘制填充误差带
    hpatch = ax.fill_between(x, y+10, y-10, color=col, alpha=0.5)
    
    # 获取当前已有的图例元素和标签
    existing_handles, existing_labels = ax.get_legend_handles_labels()
    # 追加新的组合条目
    new_handles = existing_handles + [(hline, hpatch)]
    new_labels = existing_labels + [f"group {group}: Mean + interval"]
    # 更新图例
    ax.legend(handles=new_handles, labels=new_labels)

fig, ax = plt.subplots()
x = np.linspace(1, 100, 100)
plot(x, x, ax, "C0", 1)
plot(x, x+30, ax, "C1", 2)
plot(x, x+60, ax, "C2", 3)

plt.show()

关键说明:

  1. 用ax.get_legend_handles_labels()获取当前图例已有的所有手柄和标签,避免每次调用legend()时覆盖旧内容。
  2. 将新的(hline, hpatch)组合追加到手柄列表,对应的标签也追加到标签列表,再重新生成图例。
  3. 去掉了原代码中'k--'里的k,因为后续color=col会覆盖黑色,保留--即可指定虚线样式。

这样每次调用自定义plot函数时,都会把当前组的线条+误差带组合添加到图例中,最终就能显示所有3个组的条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:20:29