Получить цветной цикл линии по умолчанию

Я заметил, когда вы заговорили, что первая строка синяя, затем зеленая, затем красная и т.д.

Есть ли способ получить доступ к этому списку цветов? Я видел миллион сообщений о том, как изменить цикл цвета или получить доступ к итератору, но не о том, как просто получить список цветов, которые matplotlib выполняет по умолчанию.

Ответ 1

В версиях matplotlib> = 1.5 вы можете напечатать rcParam именем axes.prop_cycle:

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

# [u'#1f77b4', u'#ff7f0e', u'#2ca02c', u'#d62728', u'#9467bd', u'#8c564b', u'#e377c2', u'#7f7f7f', u'#bcbd22', u'#17becf']

Или, что то же самое, в python3:

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

В версиях <1.5 это называлось color_cycle:

print plt.rcParams['axes.color_cycle']

# [u'b', u'g', u'r', u'c', u'm', u'y', u'k']

Обратите внимание, что цветовой цикл по умолчанию изменился в версии 2.0.0 http://matplotlib.org/users/dflt_style_changes.html#colors-in-default-property-cycle

Ответ 2

Часто нет необходимости получать цветной цикл по умолчанию из любого места, так как он по умолчанию, поэтому достаточно использовать его.

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)

for i in range(4):
    line, = ax.plot(t,i*(t+1), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':')

plt.show()

введите описание изображения здесь

Если вы хотите использовать цветной цикл по умолчанию для чего-то другого, есть, конечно, несколько вариантов.

"tab10" colormap

Сначала следует отметить, что цветовая палитра "tab10" содержит цвета от цветового цикла по умолчанию, вы можете получить ее через cmap = plt.get_cmap("tab10").

Эквивалент выше, следовательно, будет

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)
cmap = plt.get_cmap("tab10")
for i in range(4):
    ax.plot(t,i*(t+1),   color=cmap(i), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color=cmap(i), linestyle = ':')

plt.show()

Цвета от цветового цикла

Вы также можете напрямую использовать циферблат цветов, cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']. Это дает список с цветами из цикла, которые вы можете использовать для повторения.

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']

for i in range(4):
    ax.plot(t,i*(t+1),   color=cycle[i], linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color=cycle[i], linestyle = ':')

plt.show()

Обозначение CN

Наконец, нотация CN позволяет получить N -й цвет цветового цикла color="C{}".format(i). Однако это работает только для первых 10 цветов (N in [0,1,...9])

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

t = np.arange(5)

for i in range(4):
    ax.plot(t,i*(t+1),   color="C{}".format(i), linestyle = '-')
    ax.plot(t,i*(t+1)+.3,color="C{}".format(i), linestyle = ':')

plt.show()

Все приведенные здесь коды дают один и тот же сюжет.