Как сделать так, чтобы гистограммы автоматически переключались между разными цветами? - PullRequest
15 голосов
/ 29 августа 2010

В matplotlib, линия автоматически отображает цветовой цикл.Эти два линейных графика будут иметь разные цвета.

axes.plot(x1, y)
axes.plot(x2, y)

Однако, линейные графики не имеют.Обе эти серии данных будут иметь синие столбцы.

axes.bar(x1, y)
axes.bar(x2, y)

Как сделать так, чтобы столбчатые диаграммы автоматически циклически отображались в предварительно заданном наборе цветов?

Ответы [ 3 ]

24 голосов
/ 29 августа 2010

Будет ли что-то подобное для вас?

#!/usr/bin/python 
from matplotlib import cm
import matplotlib.pyplot as plt

#data
x=[1,2,4]
y=[11,12,8]

for i in range(0,len(x)):
  plt.bar(x[i],y[i],color=cm.jet(1.*i/len(x)))

plt.show()

Подробнее о colormaps .

РЕДАКТИРОВАТЬ: см. этот пример как перебрать предопределенный набор цветов.

4 голосов
/ 13 июня 2016

Необязательно: Чтобы получить полный контроль над стилем ваших фигур, используйте существующий mplstyle в качестве шаблона: https://github.com/matplotlib/matplotlib/tree/master/lib/matplotlib/mpl-data/stylelib

настройте параметр: axes.prop_cycle: cycler ('color', [....])

загрузить свой стиль:

from matplotlib import style
style.use ('PATH TO YOUR MPL STYLE')

Вы можете циклически проходить свой цветовой цикл или стиль по умолчанию практически любым способом:

#!/usr/bin/python 
import matplotlib.pyplot as plt

#data
x=[1,2,4]
y=[11,12,8]
prop_iter = iter(plt.rcParams['axes.prop_cycle'])

for i in range(0,len(x)):
  plt.bar(x[i],y[i],color=next(prop_iter)['color'])

plt.show()

plt.rcParams ['axes.prop_cycle'] захватывает все циклы, поэтому вам нужно выбрать правильный цикл с помощью клавиши ['color'].

Вы можете отказаться от создания итератора и использовать понимание спискаи zip для создания одного вкладыша:

#!/usr/bin/python 
import matplotlib.pyplot as plt

x=[1,2,4]
y=[11,12,8]
prop = plt.rcParams['axes.prop_cycle']
[plt.bar(param[0],param[1],color=param[2]['color']) for param in zip(x,y,prop)]
plt.show()

введите описание изображения здесь

3 голосов
/ 29 августа 2010

Из документации на http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.bar

Гистограммы не изменяют цвет автоматически, но вы можете установить цвет напрямую, передав цветовые свойства. Примерно так:

colors = ['red', 'blue', 'green']
i = -1
def getCycledColor():
    global i, colors
    if i < len(colors) -1
        i = i + 1
        return colors[i]
    else:
        i = -1
axes.bar(x1,y,facecolor=getCycledColor())
axes.bar(x2,y,facecolor=getCycledColor())

Цвета могут быть выбраны из заранее определенного списка и циклически.

...