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

如何使用Matplotlib直接绘制NumPy数组为多条曲线并添加统一标签?

嘿,这个问题问得好!其实不用把NumPy数组转成列表再遍历,matplotlib本身就有简洁的方法实现你想要的「多条曲线共用一个统一图例标签」的需求~

先拆解下你原始代码的小问题:当你用plt.plot(np.transpose(data), c="b", label="hello stack")时,plot会给每条绘制的曲线都加上这个标签,最后图例里会出现重复的条目。下面分享两种优雅的解决方案:

方法一:利用plot返回的线对象,仅给第一条曲线设置标签

plt.plot()执行后会返回一个Line2D对象的列表,对应每条绘制的曲线。我们可以直接操作这个列表,只给第一条曲线设置标签,其他曲线默认无标签:

import numpy as np
import matplotlib.pyplot as plt

data = np.array([[1, 2, 3, 4, 5, 6], [1, 5, 3, 8, 9, 6]])
# 获取所有曲线的Line2D对象
lines = plt.plot(np.transpose(data), c="b")
# 仅给第一条曲线设置标签
lines[0].set_label("hello stack")
plt.legend()
plt.show()

这样图例里只会显示一个「hello stack」的标签,所有曲线共用这个图例项,完美匹配你的需求。

方法二:直接拆分数组绘制,仅第一条带标签

如果你想在更少的代码行里搞定,可以利用NumPy的切片功能,分开绘制第一条和剩余的曲线:

import numpy as np
import matplotlib.pyplot as plt

data = np.array([[1, 2, 3, 4, 5, 6], [1, 5, 3, 8, 9, 6]])
# 先画第一条曲线并设置标签,再画剩下的曲线(不带标签)
plt.plot(data[0], c="b", label="hello stack")
plt.plot(data[1:].T, c="b")
plt.legend()
plt.show()

这种方法适合曲线数量较少的场景,但方法一的通用性更强——不管你有多少条曲线,都不用手动拆分数组,直接处理返回的线对象即可。

额外小技巧:不同颜色曲线共用统一标签

如果你的曲线颜色不同,但还是想共用一个标签,可以在调用legend()时手动指定要显示的图例条目:

lines = plt.plot(np.transpose(data))
# 只把第一条曲线作为图例的代表,绑定统一标签
plt.legend(handles=[lines[0]], labels=["hello stack"])
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:22:45