可以在matplotlib中的不同图中保持相同颜色的相同线条吗?

时间:2016-06-08 20:25:35

标签: python matplotlib

假设我有一个数字A由10行组成:1到10,默认设置为matplotlib。

现在我想绘制图B中的1-5行和图C中的6-10行,但保持线的颜色一致。我的意思是在图B中,第1-5行的颜色与图A中的第1-5行相同;在图C中,第6-10行的颜色与图A中的第6-10行相同。

有没有办法做到这一点?提前谢谢!

2 个答案:

答案 0 :(得分:1)

如果您通过指定标签链接您的图表(如果您还有图例则很有用),那么您可以查找以前的颜色。

原始问题:

import matplotlib.pyplot as plt
plt.style.use('ggplot')
import numpy as np


f, axs = plt.subplots(3)

lines = [np.random.rand(10,1) for a in range(10)]

for i, line in enumerate(lines):
    axs[0].plot(line)

for i, line in enumerate(lines[:5]):
    axs[1].plot(line)

for i, line in enumerate(lines[5:]):
    axs[2].plot(line)

axs[0].set_title("All Lines")
axs[1].set_title("First Five")
axs[2].set_title("Last Five")
f.tight_layout()
plt.savefig("No Linking.png")

No Linking of colours

然后添加一些标签:

f, axs = plt.subplots(3)

for i, line in enumerate(lines):
    label = "Line {}".format(i)
    axs[0].plot(line, label=label)

for i, line in enumerate(lines):
    if i < 5:
        ax = axs[1]
    else:
        ax = axs[2]

    label = "Line {}".format(i)
    # here we look up what colour was used in the first subplot.
    colour = [l for l in axs[0].lines if l._label == label][0]._color
    ax.plot(line, label=label, color=colour)



axs[0].set_title("All Lines")
axs[1].set_title("First Five")
axs[2].set_title("Last Five")
f.tight_layout()
plt.savefig("With Linking.png")

enter image description here

答案 1 :(得分:-2)

对于第6-10行,只需绘制5条空行,然后绘制您想要的实际线条。 1-5将具有与1-10方案匹配的默认颜色。

import matplotlib.pyplot as plt
plt.plot([0]) # line 1
plt.plot([0]) # line 2
plt.plot([0]) # line 3
plt.plot([0]) # line 4
plt.plot([0]) # line 5
plt.plot([1,2,3,4]) # line 6
plt.ylabel('some numbers')
plt.show()