Ответ 1
В версиях matplotlib 1.0+ вы можете использовать axes.color_cycle
(см. example), а в более ранних версиях Axes.set_default_color_cycle
(см. href= "http://nullege.com/codes/search/matplotlib.axes.set_default_color_cycle" > пример).
Я бы не хотел указывать цвет для каждой построенной строки:
for i in range(20):
ax1.plot(x, y)
Если вы посмотрите на изображение для этого, matplotlib попытается выбрать цвета для каждой строки, которые отличаются друг от друга, но в конечном итоге он повторно использует цвета. Я просто хочу, чтобы он не повторял уже используемые цвета AND/OR, подал ему список цветов, которые будут использоваться.
В версиях matplotlib 1.0+ вы можете использовать axes.color_cycle
(см. example), а в более ранних версиях Axes.set_default_color_cycle
(см. href= "http://nullege.com/codes/search/matplotlib.axes.set_default_color_cycle" > пример).
Я обычно использую 3-й из этих 3-х, также я не проверял 1 и 2 версию.
from matplotlib.pyplot import cm
import numpy as np
#variable n should be number of curves to plot (I skipped this earlier thinking that it is obvious when looking at picture - sorry my bad mistake xD): n=len(array_of_curves_to_plot)
#version 1:
color=cm.rainbow(np.linspace(0,1,n))
for i,c in zip(range(n),color):
ax1.plot(x, y,c=c)
#or version 2: - faster and better:
color=iter(cm.rainbow(np.linspace(0,1,n)))
c=next(color)
plt.plot(x,y,c=c)
#or version 3:
color=iter(cm.rainbow(np.linspace(0,1,n)))
for i in range(n):
c=next(color)
ax1.plot(x, y,c=c)
пример 3:
prop_cycle
color_cycle
устарел в 1.5 в пользу этого обобщения: http://matplotlib.org/users/whats_new.html#added-axes-prop-cycle-key-to-rcparams
# cycler is a separate package extracted matplotlib.
from cycler import cycler
import matplotlib.pyplot as plt
plt.rc('axes', prop_cycle=(cycler('color', ['r', 'g', 'b'])))
plt.plot([1, 2])
plt.plot([2, 3])
plt.plot([3, 4])
plt.plot([4, 5])
plt.plot([5, 6])
plt.show()
Также показано в примере (в настоящее время с неправильным названием): http://matplotlib.org/1.5.1/examples/color/color_cycle_demo.html, упомянутом по адресу: fooobar.com/questions/92506/...
Проверено в матплотлибе 1.5.1.
Я не знаю, можете ли вы автоматически изменить цвет, но вы можете использовать свой цикл для генерации разных цветов:
for i in range(20):
ax1.plot(x, y, color = (0, i / 20.0, 0, 1)
В этом случае цвета будут варьироваться от черного до 100% зеленого, но вы можете настроить его, если хотите.
Смотрите matplotlib plot() docs и найдите аргумент ключевого слова color
.
Если вы хотите подавать список цветов, просто убедитесь, что у вас есть список достаточно большой, а затем используйте индекс цикла для выбора цвета
colors = ['r', 'b', ...., 'w']
for i in range(20):
ax1.plot(x, y, color = colors[i])
Вы также можете изменить цвет по умолчанию в вашем файле matplotlibrc
.
Если вы не знаете, где находится этот файл, выполните следующие действия в python:
import matplotlib
matplotlib.matplotlib_fname()
Это покажет вам путь к используемому в настоящее время файлу matplotlibrc.
В этом файле вы найдете среди многих других настроек, а также один для axes.color.cycle
. Просто введите желаемую последовательность цветов, и вы найдете ее в каждом сюжете, который вы делаете.
Обратите внимание, что вы также можете использовать все допустимые имена цветов html в matplotlib.
Вы можете использовать предопределенную "качественную цветовую карту" следующим образом:
from matplotlib.cm import get_cmap
name = "Accent"
cmap = get_cmap(name) # type: matplotlib.colors.ListedColormap
colors = cmap.colors # type: list
axes.set_prop_cycle(color=colors)
Проверено на matplotlib 3.0.3. См. Https://github.com/matplotlib/matplotlib/issues/10840, чтобы обсудить, почему нельзя вызывать axes.set_prop_cycle(color=cmap)
.
Список предопределенных качественных цветовых карт доступен по адресу https://matplotlib.org/gallery/color/colormap_reference.html: