Как сделать штриховые графики автоматически переключаться между разными цветами?

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

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

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

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

Как сделать циклы штриховок автоматически в соответствии с предопределенным набором цветов?

Ответы

Ответ 1


Дополнительно: Чтобы получить полный контроль над стилем ваших фигур, используйте существующий 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'].

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

#!/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()

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

Ответ 2

Будет ли что-то в этом направлении делать для вас?

#!/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.

EDIT: см. этот пример для того, чтобы выполнить цикл над предопределенным набором цветов.

Ответ 3

Из документации в 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())

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