TL; DR Нет, это невозможно сделать автоматически .Да, это возможно.
Каждый график (axes
) на рисунке (figure
) имеет свой собственный цикл цветов - если вы не назначаете разный цвет для каждого графика, все графикиразделить тот же порядок цветов.
Достижение разного цвета на каждом графике может быть достигнуто автоматически только в том случае, если мы растягиваем немного, что означает «автоматически».ОП написал
[...] Я должен идентифицировать каждый сюжет с различным цветом, который должен автоматически генерироваться [Matplotlib].
Но ...Matplotlib автоматически генерирует разные цвета для каждой отдельной кривой
In [10]: import numpy as np
...: import matplotlib.pyplot as plt
In [11]: plt.plot((0,1), (0,1), (1,2), (1,0));
Out[11]:
Так почему запрос OP?Если мы продолжим читать, у нас будет
Не могли бы вы дать мне способ разместить разные цвета для разных графиков на одной фигуре?
и это имеет смысл,потому что каждый сюжет (каждый axes
на языке Matplotlib) имеет свой собственный color_cycle
(точнее, в 2018 году, его prop_cycle
), и каждый сюжет (axes
) использует одни и те же цвета в том же порядке.
In [12]: fig, axes = plt.subplots(2,3)
In [13]: for ax in axes.flatten():
...: ax.plot((0,1), (0,1))
Если в этом смысл первоначального вопроса, можно явно указать разные цвета для каждого сюжета.
Если графики (как это часто бывает) генерируются в цикле, у нас должна быть дополнительная переменная цикла, чтобы переопределить цвет автоматически , выбранный Matplotlib.
In [14]: fig, axes = plt.subplots(2,3)
In [15]: for ax, short_color_name in zip(axes.flatten(), 'brgkyc'):
...: ax.plot((0,1), (0,1), short_color_name)
Другой возможностью является создание объекта-циклиста
from cycler import cycler
my_cycler = cycler('color', ['k', 'r']) * cycler('linewidth', [1., 1.5, 2.])
actual_cycler = my_cycler()
fig, axes = plt.subplots(2,3)
for ax in axes.flat:
ax.plot((0,1), (0,1), **next(actual_cycler))
Обратите внимание, что type(my_cycler)
равно cycler.Cycler
но type(actual_cycler)
- это itertools.cycle
.