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

如何在MatPlotLib(Python3.9)中为多数据集设置同一图例标签?

在Matplotlib中让多条线共用同一图例标签并保持同色

当然可以实现,你的问题出在每次调用plot都重复设置了相同标签,且没有指定统一颜色,导致Matplotlib默认循环分配颜色并生成多个图例条目。下面是几种可行的解决方法:

方法一:仅首次绘图设置标签,指定统一颜色

这是最直接的方式,循环中只有第一条线设置图例标签,后续线条只指定颜色不设置标签:

import matplotlib.pyplot as plt

dataX = [[0, 1, 2], [0, 1, 2]]
dataY = [[0, 1, 2], [2, 1, 0]]
dataLabel = "Test Data"
# 指定统一颜色,也可以用Matplotlib预设的颜色,比如plt.rcParams['axes.prop_cycle'].by_key()['color'][0]
line_color = '#1f77b4'

for i in range(len(dataX)):
    # 仅第一次绘图时设置图例标签,后续不设置
    plt.plot(dataX[i], dataY[i], color=line_color, label=dataLabel if i == 0 else "")

plt.legend(loc='best')
plt.show()
plt.close()

方法二:绘制完成后手动生成图例

如果已经绘制完所有线条,可通过获取绘图句柄来手动创建只包含一个条目的图例:

import matplotlib.pyplot as plt

dataX = [[0, 1, 2], [0, 1, 2]]
dataY = [[0, 1, 2], [2, 1, 0]]
dataLabel = "Test Data"
line_color = '#1f77b4'

# 绘制所有线条,不设置标签
for i in range(len(dataX)):
    plt.plot(dataX[i], dataY[i], color=line_color)

# 获取绘图句柄,用第一个句柄创建图例
handles, _ = plt.gca().get_legend_handles_labels()
plt.legend([handles[0]], [dataLabel], loc='best')

plt.show()
plt.close()

方法三:完全自定义图例条目

通过Line2D手动构建图例元素,适合需要更灵活控制图例样式的场景:

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

dataX = [[0, 1, 2], [0, 1, 2]]
dataY = [[0, 1, 2], [2, 1, 0]]
dataLabel = "Test Data"
line_color = '#1f77b4'

# 绘制所有线条
for i in range(len(dataX)):
    plt.plot(dataX[i], dataY[i], color=line_color)

# 手动创建图例条目
custom_legend = [Line2D([0], [0], color=line_color, lw=2, label=dataLabel)]
plt.legend(handles=custom_legend, loc='best')

plt.show()
plt.close()

以上三种方法都能实现你要的效果:两条线颜色一致,且图例只显示一个"Test Data"条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:15:53