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

cygmwpex  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(263)

假设我有两组数据要绘制,x1和x2 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循环中每次迭代的数据都用相同的颜色绘制,并突出一个标签?

7cjasjjr

7cjasjjr1#

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

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()
nle07wnf

nle07wnf2#

您可以通过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在图例中只出现一次。

相关问题