Reputation: 1479
Matplotlib plots each column of my matrix a
with 4 columns by blue, yellow, green, red.
Then, I plot only the second, third, fourth columns from matrix a[:,1:4]
. Is it possible to make Matplotlib ignore blue from default and start from yellow (so my every lines get the same color as previous)?
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()
Upvotes: 8
Views: 6323
Reputation: 339200
The colors used for the successive lines are the one from a color cycler. In order to skip a color in this color cycle, you may call
ax._get_lines.prop_cycler.next() # python 2
next(ax._get_lines.prop_cycler) # python 2 or 3
The complete example would look like:
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()
Upvotes: 9
Reputation: 25362
In order to skip the first color I would suggest getting a list of the current colors by using
plt.rcParams['axes.prop_cycle'].by_key()['color']
As shown in this question/answer. Then set the color cycle for the current axes by using:
plt.gca().set_color_cycle()
Therefore your full example would be:
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()
Which gives:
Upvotes: 4
Reputation: 1403
I have the impression that you want to make sure that every colone keeps a defined color. To do this you can create a color vector that matches each column to display. You can create a color vector. 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()
Upvotes: 1
Reputation: 1814
You can insert an extra call to ax.plot([],[])
before calling 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()
Upvotes: 4