如何通过多次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()
关键说明:
- 用
ax.get_legend_handles_labels()获取当前图例已有的所有手柄和标签,避免每次调用legend()时覆盖旧内容。 - 将新的
(hline, hpatch)组合追加到手柄列表,对应的标签也追加到标签列表,再重新生成图例。 - 去掉了原代码中
'k--'里的k,因为后续color=col会覆盖黑色,保留--即可指定虚线样式。
这样每次调用自定义plot函数时,都会把当前组的线条+误差带组合添加到图例中,最终就能显示所有3个组的条目。
内容的提问来源于stack exchange,提问作者Ben Vincent
相关产品推荐
相关产品推荐

