是否可以忽略Matplotlib的第一个默认颜色进行绘图?

时间:2017-10-10 15:38:50

标签: python python-2.7 matplotlib plot

Matplotlib将我的矩阵a的每列绘制成4列蓝色,黄色,绿色,红色。 enter image description here

然后,我只绘制矩阵a[:,1:4]中的第二,第三,第四列。是否有可能使Matplotlib从默认值中忽略蓝色并从黄色开始(所以我的每一行都得到与之前相同的颜色)? enter image description here

a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)

lab = np.array(["A","B","C","E"])

fig, ax = plt.subplots()
ax.plot(a)
ax.legend(labels=lab )
# plt.show()
fig, ax = plt.subplots()
ax.plot(a[:,1:4])
ax.legend(labels=lab[1:4])
plt.show()

4 个答案:

答案 0 :(得分:6)

用于连续线的颜色是来自颜色循环仪的颜色。 为了跳过此颜色循环中的颜色,您可以调用

:=

完整的示例如下:

ax._get_lines.prop_cycler.next()  # python 2
next(ax._get_lines.prop_cycler)   # python 2 or 3

答案 1 :(得分:3)

为了跳过第一种颜色,我建议使用

获取当前颜色的列表
plt.rcParams['axes.prop_cycle'].by_key()['color']

this问题/答案中所示。然后使用以下方法设置当前轴的颜色循环:

plt.gca().set_color_cycle()

因此,您的完整示例将是:

a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)

lab = np.array(["A","B","C","E"])
colors = plt.rcParams['axes.prop_cycle'].by_key()['color']

fig, ax = plt.subplots()
ax.plot(a)
ax.legend(labels=lab )

fig1, ax1 = plt.subplots()
plt.gca().set_color_cycle(colors[1:4])
ax1.plot(a[:,1:4])
ax1.legend(labels=lab[1:4])
plt.show()

给出了:

enter image description here

enter image description here

答案 2 :(得分:2)

在致电ax.plot([],[])之前,您可以拨打ax.plot(a[:,1:4])的额外电话。

a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)

lab = np.array(["A","B","C","E"])

fig, ax = plt.subplots()
ax.plot(a)
ax.legend(labels=lab )
# plt.show()
fig, ax = plt.subplots()
ax.plot([],[])
ax.plot(a[:,1:4])
ax.legend(labels=lab[1:4])
plt.show()

答案 3 :(得分:1)

我的印象是你要确保每个colone都保持定义的颜色。为此,您可以创建一个颜色向量,以匹配要显示的每个列。您可以创建颜色矢量。 color = [" blue"," yellow"," green"," red"]

a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)

lab = np.array(["A","B","C","E"])
color = ["blue", "yellow", "green", "red"]

fig, ax = plt.subplots()
ax.plot(a, color = color)
ax.legend(labels=lab )
# plt.show()
fig, ax = plt.subplots()
ax.plot(a[:,1:4])
ax.legend(labels=lab[1:4], color = color[1:4])
plt.show()