Matplotlib делает это по умолчанию.
Например:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
plt.plot(x, x)
plt.plot(x, 2 * x)
plt.plot(x, 3 * x)
plt.plot(x, 4 * x)
plt.show()
И, как вы уже знаете, вы можете легко добавить легенду:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
plt.plot(x, x)
plt.plot(x, 2 * x)
plt.plot(x, 3 * x)
plt.plot(x, 4 * x)
plt.legend(['y = x', 'y = 2x', 'y = 3x', 'y = 4x'], loc='upper left')
plt.show()
Если вы хотите контролировать цвета, которые будут циклически проходить:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
plt.gca().set_color_cycle(['red', 'green', 'blue', 'yellow'])
plt.plot(x, x)
plt.plot(x, 2 * x)
plt.plot(x, 3 * x)
plt.plot(x, 4 * x)
plt.legend(['y = x', 'y = 2x', 'y = 3x', 'y = 4x'], loc='upper left')
plt.show()
Если вы не знакомы с matplotlib, учебник - хорошее место для начала .
Редактировать:
Прежде всего, если у вас есть много (> 5) вещей, которые вы хотите построить на одной фигуре, либо:
- Разместите их на разных участках (рассмотрите возможность использования нескольких участков на одном рисунке), или
- Используйте что-то кроме цвета (то есть стили маркера или толщину линии), чтобы различать их.
В противном случае вы получите очень грязный сюжет! Будьте добры к тому, кто когда-либо прочитает все, что вы делаете, и не пытайтесь втиснуть 15 разных вещей в одну фигуру !!
Кроме того, многие люди в разной степени дальтоники, и различие между многочисленными едва различимыми цветами трудно для большего количества людей, чем вы можете себе представить.
При этом, если вы действительно хотите поместить 20 линий на одну ось с 20 относительно разными цветами, вот один из способов сделать это:
import matplotlib.pyplot as plt
import numpy as np
num_plots = 20
# Have a look at the colormaps here and decide which one you'd like:
# http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html
colormap = plt.cm.gist_ncar
plt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
# Plot several different functions...
x = np.arange(10)
labels = []
for i in range(1, num_plots + 1):
plt.plot(x, i * x + 5 * i)
labels.append(r'$y = %ix + %i$' % (i, 5*i))
# I'm basically just demonstrating several different legend options here...
plt.legend(labels, ncol=4, loc='upper center',
bbox_to_anchor=[0.5, 1.1],
columnspacing=1.0, labelspacing=0.0,
handletextpad=0.0, handlelength=1.5,
fancybox=True, shadow=True)
plt.show()
set_color_cycle
он не рекомендуется, так что строка должна бытьplt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
и просто изменить вplt.cm.YOUR_PREFERED_COLOR_MAP
соответствии с вашими потребностями.axes
) и спрашивал об изменении цвета одной линии на разных графиках (разныхaxes
) ... Тем не менее, отличный ответ на важный вопрос (возможно, отличается от того, что задавал ОП, но никто не может сказать, потому что они задали этот единственный вопрос и исчезли!) - +1Установка их позже
Если вы не знаете количество графиков, которые вы собираетесь построить, вы можете изменить цвета, как только вы нанесете их на график, получая номер непосредственно из графика, используя это
.lines
, я использую это решение:Некоторые случайные данные
Кусок кода, который вам нужен:
Результат следующий:
источник
TL; DR Нет, это не может быть сделано автоматически . Да, это возможно.
Каждый участок (
axes
) на рисунке (figure
) имеет свой собственный цикл цветов - если вы не заставляйте другой цвет для каждого участка, все участки разделяют один и тот же порядок цветов , но, если мы растянуть немного какие «автоматически» средство , это может быть сделано.ОП написала
Но ... Matplotlib автоматически генерирует разные цвета для каждой кривой
Так почему запрос ОП? Если мы продолжим читать, у нас есть
и это имеет смысл, потому что каждый сюжет (каждый
axes
на языке Matplotlib) имеет свой собственныйcolor_cycle
(точнее, в 2018 годуprop_cycle
) и каждый сюжет (axes
) использует одни и те же цвета в том же порядке.Если в этом смысл первоначального вопроса, одна из возможностей - явно назвать разные цвета для каждого сюжета.
Если графики (как это часто бывает) генерируются в цикле, мы должны иметь дополнительную переменную цикла, чтобы переопределить цвет, автоматически выбранный Matplotlib.
Другая возможность состоит в том, чтобы создать объект cycler
Обратите внимание, что
type(my_cycler)
есть,cycler.Cycler
ноtype(actual_cycler)
естьitertools.cycle
.источник
Я хотел бы предложить небольшое улучшение в последнем цикле ответа, приведенного в предыдущем посте (этот пост является правильным и все еще должен быть принят). Неявное предположение, сделанное при маркировке последнего примера, заключается в том, что
plt.label(LIST)
номер метки X вставляется вLIST
строку, соответствующую X-му времениplot
. Я столкнулся с проблемами с этим подходом раньше. Рекомендуемый способ создавать легенды и настраивать их метки в соответствии с документацией matplotlibs ( http://matplotlib.org/users/legend_guide.html#adjusting-the-order-of-legend-item ) - иметь теплое ощущение, что метки идут наряду с точными графиками, которые вы думаете, они делают:**: Легенды Matplotlib не работают
источник