Предположим, что у меня есть цикл for, и я хочу нарисовать точки разных цветов:
for i in range(5):
 plt.plot(x,y,col=i)
Как автоматически изменить цвета в цикле for?
Предположим, что у меня есть цикл for, и я хочу нарисовать точки разных цветов:
for i in range(5):
 plt.plot(x,y,col=i)
Как автоматически изменить цвета в цикле for?
@tcaswell уже ответил, но я как раз набирал ответ, поэтому я опубликую его...
 Есть несколько разных способов сделать это. Для начала, matplotlib автоматически переключается между цветами. По умолчанию, он проходит через синий, зеленый, красный, голубой, пурпурный, желтый, черный:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 10)
for i in range(1, 6):
    plt.plot(x, i * x + i, label='$y = {i}x + {i}$'.format(i=i))
plt.legend(loc='best')
plt.show()
 
 Если вы хотите контролировать циклы, через которые проходит matplotlib, используйте ax.set_color_cycle:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 10)
fig, ax = plt.subplots()
ax.set_color_cycle(['red', 'black', 'yellow'])
for i in range(1, 6):
    plt.plot(x, i * x + i, label='$y = {i}x + {i}$'.format(i=i))
plt.legend(loc='best')
plt.show()
 
 Если вы хотите явно указать цвета, которые будут использоваться, просто передайте его color kwarg (имена цветов html принимаются, как и кортежи rgb и шестнадцатеричные строки):
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 10)
for i, color in enumerate(['red', 'black', 'blue', 'brown', 'green'], start=1):
    plt.plot(x, i * x + i, color=color, label='$y = {i}x + {i}$'.format(i=i))
plt.legend(loc='best')
plt.show()
 
Наконец, если вы хотите автоматически выбрать указанное количество цветов из существующей карты цветов:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 1, 10)
number = 5
cmap = plt.get_cmap('gnuplot')
colors = [cmap(i) for i in np.linspace(0, 1, number)]
for i, color in enumerate(colors, start=1):
    plt.plot(x, i * x + i, color=color, label='$y = {i}x + {i}$'.format(i=i))
plt.legend(loc='best')
plt.show()
 
for color in ['r', 'b', 'g', 'k', 'm']:
    plot(x, y, color=color)
 Отличный ответ Джо Кингтона - уже 4 года, Matplotlib постепенно менялся (в частности, введен модуль cycler), а в новом основном выпуске Matplotlib 2.0.x появились стилистические различия, которые важны с точки зрения цвета, используемые по умолчанию.
 Цвет отдельных линий (а также цвет различных элементов графика, например маркеров на точечных диаграммах) определяется аргументом ключевого слова color,
plt.plot(x, y, color=my_color)
 my_color либо
(0.,0.5,0.5)),"#008080" (RGB) или "#008080A0"),"k" для черного, возможные значения в "bgrcmykw"),"teal") --- так называемое имя цвета HTML (в документах также название цвета X11/CSS4),'xkcd:' (например, 'xkcd:barbie pink'),'T10' по умолчанию (например, 'tab:blue', 'tab:olive'),"C3", то есть буква "C" за которой следует одна цифра в "0-9").По умолчанию разные линии отображаются разными цветами, которые определены по умолчанию и используются циклически (отсюда и название цветового цикла).
 Цикл цвета является свойством объекта axes, и в более ранних версиях это была просто последовательность допустимых имен цветов (по умолчанию это строка имен цветов одного символа, "bgrcmyk"), и вы можете установить ее так, как в
my_ax.set_color_cycle(['kbkykrkg'])
(как отмечено в комментарии, этот API устарел, подробнее об этом позже).
 В Matplotlib 2.0 цветовой цикл по умолчанию: ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"], палитра Vega category10.
(изображение - скриншот с https://vega.github.io/vega/docs/schemes/)
Следующий код показывает, что понятие цветового цикла устарело
In [1]: from matplotlib import rc_params
In [2]: rc_params()['axes.color_cycle']
/home/boffi/lib/miniconda3/lib/python3.6/site-packages/matplotlib/__init__.py:938: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.
  warnings.warn(self.msg_depr % (key, alt_key))
Out[2]: 
['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd',
 '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']
 Теперь соответствующим свойством является 'axes.prop_cycle'
In [3]: rc_params()['axes.prop_cycle']
Out[3]: cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf'])
 Раньше color_cycle представлял собой общую последовательность допустимых цветовых обозначений, теперь по умолчанию это cycler объект, содержащий метку ('color') и последовательность допустимых цветовых обозначений. Шаг вперед по сравнению с предыдущим интерфейсом состоит в том, что можно циклически переключаться не только на цвет линий, но и на другие атрибуты строк, например,
In [5]: from cycler import cycler
In [6]: new_prop_cycle = cycler('color', ['k', 'r']) * cycler('linewidth', [1., 1.5, 2.])
In [7]: for kwargs in new_prop_cycle: print(kwargs)
{'color': 'k', 'linewidth': 1.0}
{'color': 'k', 'linewidth': 1.5}
{'color': 'k', 'linewidth': 2.0}
{'color': 'r', 'linewidth': 1.0}
{'color': 'r', 'linewidth': 1.5}
{'color': 'r', 'linewidth': 2.0}
 Как вы уже видели, cycler объекты компонуемы и когда вы итерацию по составленной cycler, что вы получите, на каждой итерации, является словарь ключевых аргументов для plt.plot.
 Вы можете использовать новые значения по умолчанию для соотношения объектов на axes,
my_ax.set_prop_cycle(new_prop_cycle)
или вы можете временно установить новый по умолчанию
plt.rc('axes', prop_cycle=new_prop_cycle)
 или измените по умолчанию редактирование файла .matplotlibrc.
Последняя возможность, используйте менеджер контекста
with plt.rc_context({'axes.prop_cycle': new_prop_cycle}):
    ...
 чтобы новый cycler использовался в группе разных графиков, возвращаясь к значениям по умолчанию в конце контекста.
 Строка документа для функции cycler() полезна, но подробности (не так много) о модуле cycler и функции cycler(), а также примеры можно найти в подробных документах.