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

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

相关链接:https://dev59.com/qVoU5IYBdhLWcg3wCjvx - Cris Luengo
4个回答

8

这些连续线条使用的颜色来自于一个颜色循环器。如果想跳过该颜色循环中的某个颜色,您可以调用

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

完整的示例如下:
import numpy as np
import matplotlib.pyplot as plt

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 )

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

4

为了跳过第一个颜色,我建议通过以下方式获取当前颜色列表:

plt.rcParams['axes.prop_cycle'].by_key()['color']

此问题/回答所示。然后,使用以下方式设置当前轴的颜色循环:

plt.gca().set_color_cycle()

因此,您的完整示例将是:<\p>
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()

这将会产生如下结果:

在此输入图片描述

在此输入图片描述


3
自版本2.0开始,使用set_color_cycle已经被弃用。应该使用set_prop_cycle代替。请注意,新方法的名称和用法都有所改变。 - ImportanceOfBeingErnest

3
您可以在调用 ax.plot(a[:,1:4])之前插入额外的调用 ax.plot([],[])
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()

1
我有这样的印象,即您希望确保每个列都保持定义的颜色。为此,您可以创建一个颜色向量,以匹配要显示的每一列。您可以创建一个颜色向量。颜色= ["蓝色","黄色","绿色","红色"]
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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接