matplotlib: назначить индивидуальный цвет каждому компоненту гистограммы - PullRequest
0 голосов
/ 22 марта 2020

Я бы хотел придать индивидуальный цвет каждому компоненту гистограммы. Например, на гистограмме ниже:

import numpy as np
import matplotlib.pyplot as plt

labels = ['Cars', 'Electric/\nHybrid/\nFuel', 'Diesel/\nOctane/\nPremium']
row1 = [2000,1800,1200]
row2 = [0,110,280]
row3 = [0,90,320]

width = 0.35
fig, ax = plt.subplots()
ax.bar(labels, row1, width, color='seagreen')
ax.bar(labels, row2, width, bottom=row1, color='gray')
ax.bar(labels, row3, width, bottom=np.array(row2)+np.array(row1), color='orange')
ax.set_ylim(0,2200)
plt.show()

bar plot example

Я хотел бы назначить настраиваемые цвета для каждого компонента столбчатой ​​диаграммы с накоплением в столбце 2 и столбец 3. В столбце 2 показана разбивка столбца 1, а в столбце 3 показана разбивка зеленого компонента столбца 2.

1 Ответ

1 голос
/ 22 марта 2020

ax.patches содержит список прямоугольников, которые используются для рисования гистограммы, в порядке их создания. Таким образом, есть 3 "синих" прямоугольника, 3 "серых" прямоугольника и 3 "оранжевых" прямоугольника.

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

import numpy as np
import matplotlib.pyplot as plt

labels = ['Cars', 'Electric/\nHybrid/\nFuel', 'Diesel/\nOctane/\nPremium']
row1 = [2000,1800,1200]
row2 = [0,110,280]
row3 = [0,90,320]

colors = ['seagreen','red','orange','seagreen','purple','yellow','seagreen','blue','brown']

width = 0.35
fig, ax = plt.subplots()
ax.bar(labels, row1, width, color='seagreen')
ax.bar(labels, row2, width, bottom=row1, color='gray')
ax.bar(labels, row3, width, bottom=np.array(row2)+np.array(row1), color='orange')
ax.set_ylim(0,2200)

for p,color in zip(ax.patches,colors):
    p.set_facecolor(color)
plt.show()

enter image description here

...