Python Matplotlib/Цветовой цикл базовой карты

Я новичок в Python и других программах, и я пытаюсь построить 21 член прогноза ансамбля, используя циклы для членов ансамбля, каждый из которых имеет выделенный номер 1-21. Когда я рисую карту, все участники становятся синими. Я провел некоторое исследование цветовых карт и обнаружил, что карты по умолчанию не индексируются, т. Е. Я не могу вызывать цветовую карту [1], как если бы это был список или массив. Существуют ли какие-либо индексированные цветовые карты или как-то обойти это? Проще говоря, я хочу переключаться между цветами, разными для каждого члена прогноза, используя простые числа.


person user3466739    schedule 27.03.2014    source источник


Ответы (1)


Вы можете использовать ax.set_prop_cycle, чтобы указать список цветов для циклического переключения.

Карты цветов можно вызывать, поэтому простой способ генерировать цвета — передать последовательность чисел с плавающей запятой от 0 до 1 в карту цветов, которая затем вернет массив цветов RGBA.

Например,

In [93]: jet = plt.cm.jet

In [94]: jet([0,0.5,1])
Out[94]: 
array([[ 0.        ,  0.        ,  0.5       ,  1.        ],
       [ 0.49019608,  1.        ,  0.47754586,  1.        ],
       [ 0.5       ,  0.        ,  0.        ,  1.        ]])

import matplotlib.pylab as plt
import matplotlib.rcsetup as rcsetup
import numpy as np

jet = plt.cm.jet
fig, ax = plt.subplots()
N = 20
idx = np.linspace(0, 1, N)
ax.set_prop_cycle(rcsetup.cycler('color', jet(idx)))
x = np.linspace(0, 100, 200)
for i in range(1, N+1):
    ax.plot(x, np.sin(x)+i)
ax.set_ylim(0, N+1)
plt.show()

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

person unutbu    schedule 27.03.2014
comment
Как можно получить массив текущей карты цветового цикла? - person Royi; 11.11.2017
comment
ax._get_lines.prop_cycler возвращает итератор, который возвращает цвета из текущего цветового цикла. Предполагая, что цветовой цикл не содержит дубликатов, вы можете создать список цветов из цикла, используя: seen = set(), colors = list(itertools.takewhile(lambda x: x not in seen and not seen.add(x), (tuple(item['color']) for item in ax._get_lines.prop_cycler))). - person unutbu; 11.11.2017