如何在matplotlib中使两条直线使用相同的颜色和图例标签?

ukxgm1gy  于 2023-01-05  发布在  其他
关注(0)|答案(2)|浏览(198)

假设我需要绘制两组数据,x1vs. y1和x2 vs. y2。其中,x变量为时间向量,y为与x行数相同、5列的矩阵,每列为一行:

for i in range(5):
    plt.plot(x1,y1[:,i],x2,y2[:,i],label=labels[i])
plt.legend()

这会导致每一行都被赋予不同的颜色和一个单独的标签,其中每个标签都重复一次,我怎么能让for循环中每次迭代的数据都用相同的颜色绘制,并突出一个标签呢?
谢谢!

e4eetjau

e4eetjau1#

您可以通过plt.plot中的c参数定义颜色。如果您将所有这些设置为相同的颜色,则每一行都将是相同的颜色:

c = "#000000"
for i in range(5):
    plt.plot(x1,y1[:,i],x2,y2[:,i],label=labels[i], c=c)
plt.legend()

现在来看标签,为了使所有行都有一个标签,您只能为一行添加标签。这可以通过以下方式实现:

c = "#000000"
label = "Same label"
for i in range(5):
    if i == 0:
        plt.plot(x1,y1[:,i],x2,y2[:,i],label=label, c=c)
    else:
        plt.plot(x1,y1[:,i],x2,y2[:,i], c=c)
plt.legend()

这将使所有线的颜色相同(本例中为黑色),并且标签Same label在图例中只出现一次。

3npbholx

3npbholx2#

有很多方法可以完成你的要求。
下面是一个简单的方法,它对第一行使用自动着色方案,并提取其颜色分配给第二行。只有第一行获得图例的标签。

for i in range(5):
    line, = plt.plot(x1, y1[i, :], label=f'label {i}')
    plt.plot(x2, y2[i, :], color=line.get_color())
plt.legend()

相关问题