Когда вы строите график, я заметил, что первая линия синяя, затем зеленая, затем красная и так далее.
Есть ли способ получить доступ к этому списку цветов? Я видел миллион сообщений о том, как изменить цветовой цикл или получить доступ к итератору, но не о том, как просто получить список цветов, которые matplotlib циклически перебирает по умолчанию.
matplotlib
Питер
источник
источник
lines_colour_cycle = [p['color'] for p in plt.rcParams['axes.prop_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) 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
Прежде всего следует упомянуть, что
"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()
Все коды, представленные здесь, дают одинаковый график.
источник
CN
обозначения должны быть более заметными в вашем ответе, я почти пропустил это. Я подозреваю, что подавляющее большинство случаев использования довольны возможностью получить доступ только к первым 10 цветам, и передача'C1'
друзей намного менее шаблонна, чем явное получение цикла опоры.Пересмотр обозначения CN
Я хотел бы остановиться на новой разработке Matplotlib. В предыдущем ответе мы читаем
но
import numpy as np import matplotlib.pyplot as plt t = np.linspace(0,6.28, 629) for N in (1, 2): C0N, C1N = 'C%d'%(N), 'C%d'%(N+10) plt.plot(t, N*np.sin(t), c=C0N, ls='-', label='c='+C0N) plt.plot(t, N*np.cos(t), c=C1N, ls='--', label='c='+C1N) plt.legend() ; plt.grid() ; plt.show()
дает
источник
если вы ищете быстрый однострочный текст для получения цветов RGB, которые matplotlib использует для своих линий, вот он:
>>> import matplotlib; print('\n'.join([str(matplotlib.colors.to_rgb(c)) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']])) (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) (1.0, 0.4980392156862745, 0.054901960784313725) (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) (0.5803921568627451, 0.403921568627451, 0.7411764705882353) (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)
Или для uint8:
import matplotlib; print('\n'.join([str(tuple(int(round(v*255)) for v in matplotlib.colors.to_rgb(c))) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']])) (31, 119, 180) (255, 127, 14) (44, 160, 44) (214, 39, 40) (148, 103, 189) (140, 86, 75) (227, 119, 194) (127, 127, 127) (188, 189, 34) (23, 190, 207)
источник