Как выбрать новый цвет для каждой построенной линии на рисунке в matplotlib? - PullRequest
80 голосов
/ 11 февраля 2011

Я бы не хотел указывать цвет для каждой построенной линии:

for i in range(20):
   ax1.plot(x, y)

Если вы посмотрите на изображение для этого, matplotlib попытается выбрать цвета для каждой линии, которые отличаются, но в конечном итоге этоповторно использует цвета.Я просто хочу, чтобы он не повторял уже использованные цвета И / ИЛИ не выдавал список используемых цветов.

Ответы [ 6 ]

86 голосов
/ 08 сентября 2014

Обычно я использую 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: example plot with iter,next color

50 голосов
/ 11 февраля 2011

В 1.0+ версиях matplotlib вы можете использовать axes.color_cycle (см. пример ), а в более старых версиях Axes.set_default_color_cycle (см. пример ).

10 голосов

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()

image

Also shown in the (now badly named) example: http://matplotlib.org/1.5.1/examples/color/color_cycle_demo.html упоминается в:https://stackoverflow.com/a/4971431/895245

Проверено в matplotlib 1.5.1.

7 голосов
/ 11 февраля 2011

Я не знаю, можете ли вы автоматически изменить цвет, но вы можете использовать свой цикл для создания разных цветов:

for i in range(20):
   ax1.plot(x, y, color = (0, i / 20.0, 0, 1)

В этом случае цвета будут варьироваться от черного до 100% зеленого, но вы можете настроить его, если хотите.

Смотрите документацию matplotlib plot () и ищите аргумент ключевого слова color.

Если вы хотите заполнить список цветов, просто убедитесь, что у вас достаточно большой список, а затем используйте индекс цикла, чтобы выбрать цвет

colors = ['r', 'b', ...., 'w']

for i in range(20):
   ax1.plot(x, y, color = colors[i])
2 голосов
/ 12 апреля 2014

Вы также можете изменить цветовой цикл по умолчанию в вашем файле matplotlibrc. Если вы не знаете, где находится этот файл, выполните в Python следующее:

import matplotlib
matplotlib.matplotlib_fname()

Это покажет вам путь к вашему текущему используемому файлу matplotlibrc. В этом файле вы найдете среди многих других настроек и настройку для axes.color.cycle. Просто введите желаемую последовательность цветов, и вы найдете ее на каждом сюжете, который вы делаете. Обратите внимание, что вы также можете использовать все допустимые имена цветов html в matplotlib.

1 голос
/ 12 апреля 2019

Вы можете использовать предопределенную «качественную цветовую карту», ​​например:

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:

List of qualitative colormaps

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...