изменить количество цветов в таблицах стилей matplotlib

Я строю несколько графиков с помощью matplotlib для публикации, и мне нужно, чтобы все они были в одном стиле. Некоторые графики имеют более 6 категорий, и я заметил, что по умолчанию они отображают не более 6 разных цветов. 7 или больше, и у меня начинают повторяться цвета.

e.g.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
plt.style.use('seaborn-muted')

df2= pd.DataFrame(np.random.rand(10,8))
df2.plot(kind='bar',stacked=True)
plt.legend(fontsize=13,loc=1)
plt.show()

Вероятно, есть когнитивная причина не включать более 6 разных цветов, но если мне нужно, как я могу это сделать? Я пробовал разные таблицы стилей (морской, ggplot, классический), и все они, похоже, имеют одно и то же «ограничение».

Нужно ли менять цветовую карту/таблицу стилей? В идеале я хотел бы использовать качественную карту цветов (в категориях, которые я рисую, нет порядка) и использовать уже существующую... Я не очень хорошо выбираю цвета.

Благодарность!


person Nabla    schedule 06.01.2017    source источник


Ответы (2)


import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

colors = plt.cm.jet(np.linspace(0, 1, 10))

df2= pd.DataFrame(np.random.rand(10,8))
df2.plot(kind='bar',color=colors, stacked=True)
plt.legend(fontsize=13,loc=1)

это в основном скопировано из График с большим количеством цветов в matplotlib. проверьте документ colormap и его пример страницы.

person Dyno Fu    schedule 06.01.2017
comment
Оно работает! потому что я хотел качественную карту цветов (jet нет, и это серьезно обескураживает), я изменил ее на Paired одну из качественных карт цветов, доступных в matplotlib matplotlib.org/users/colormaps.html - person Nabla; 11.01.2017

По умолчанию matplotlib циклически перебирает серию из шести цветов. Если вы хотите изменить цвета по умолчанию (или количество цветов), вы можете использовать cycler для циклического просмотра цвета, которые вы хотите вместо значений по умолчанию.

from cycler import cycler

% Change the default cycle colors to be red, green, blue, and yellow
plt.rc('axes', prop_cycle=(cycler('color', ['r', 'g', 'b', 'y']))

демонстрация здесь

Лучший способ - просто вручную указать цвета графика при создании plot, чтобы не каждый график, который вы создаете, должен был использовать одни и те же цвета.

plt.plot([1,2,3], 'r')
plt.plot([4,5,6], 'g')
plt.plot([7,8,9], 'b')
plt.plot([10,11,12], 'y')

Или вы можете изменить цвет после создания

h = plt.plot([1,2,3])
h.set_color('r')
person Suever    schedule 06.01.2017
comment
Обратите внимание, что список цветов, переданный в cycler(), может быть как произвольной длины, так и в любом формате, поддерживаемом matplotlib.colors. Например, у меня в matplotlibrc: cycler("color", "348ABD, 7A68A6, A60628, 467821, CF4457, 188487, E24A33") - синий, фиолетовый, красный, зеленый, розовый, бирюзовый, оранжевый. Шестнадцатеричные цвета могут включать или не включать хэш # и могут быть строкой с разделителями-запятыми (как у меня) или списком. Вы также можете использовать цвета X11. - person MattDMo; 06.01.2017