Как поместить цвета в гистограмму matplotlib? - PullRequest
1 голос
/ 26 сентября 2019

Я пытаюсь раскрасить каждый столбец графика ниже.Мне нужно указать конкретные цвета, которые я могу вручную установить для каждой из полос.

enter image description here

Я уже пытался использовать: # Попытка 1

colors = ['cyan', 'lightblue', 'lightgreen', 'tan','blue']

for patch, color in zip (bar_plot ['boxes'], colors):
    patch.set_facecolor (color)

Результат для попытки 1-> Что выдает ошибку: объект 'AxesSubplot' не может быть подписан

# Попытка 2

colors = ['#1b9e77', '#a9f971', '#fdaa48','#6890F0','#A890F0']

ax1 = dfPoputationResident.plot('Zona','Total_MSP', kind = 'bar', color = colors);

Результат для попытки 2-> Это не работает, все столбцы имеют цвет '# 1b9e77', а не как спред, каждый столбец принимает цвет.

Я считаю, что этопроисходит из-за моего фрейма данных, который является результатом слияния, сделанного ранее.

enter image description here

Поэтому перед созданием графа я сбрасываю индекс.

dfPoputationResident = dfPoputationResident.reset_index () Это кадр данных после reset_index

enter image description here

Затем я сделал:

ax1 = dfPoputationResident.plot ('Zone', 'Total_MSP', kind = 'bar');

Но даже после сброса индекса, когда я делаю

dfPoputationResident.columns
MultiIndex (levels = [['Total_MSP', 'Zone'], ['sum', '']],
           codes = [[1,0], [1,0]])

С учетом этих характеристик, как я могу сделать гистограмму и разместить определенные цвета на каждой полосе?Помоги мне, пожалуйста.Я новичок в Python.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Следует моему коду с совращением, предложенным Куанг Хоангом:

dfPoputationResident.columns = ['Zona', 'Total_MSP']

dfPoputationResident = dfPoputationResident.groupby('Zona')['Total_MSP'].sum()

df = pd.DataFrame({'Zona':list('abcde'),
                   'Total_MSP':[dfPoputationResident.iloc[0],dfPoputationResident.iloc[1],dfPoputationResident.iloc[2],dfPoputationResident.iloc[3],dfPoputationResident.iloc[4]]})

colors = ['#1b9e77', '#a9f971', '#fdaa48','#6890F0','#A890F0']
df.plot.bar(x='Zona',y='Total_MSP',color=colors)


#change the name of month on the x 
ax = plt.gca()
names= ['Centro', 'Leste', 'Norte', 'Oeste', 'Sul']   
ax.set_xticklabels(names)

x = plt.gca().xaxis

# rotate the tick labels for the x axis
for item in x.get_ticklabels():
    item.set_rotation(0)    

for spine in plt.gca().spines.values():
    spine.set_visible(False)
plt.show()

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

0 голосов
/ 26 сентября 2019

Возможно, это потому, что ваш фрейм данных - это многоиндексные столбцы.Попробуйте:

dfPoputationResident.columns = ['Zona', 'Total_MSP']

Еще одна вещь, которую вы можете сделать, когда вы groupby создаете dfPoputationResident, вы можете сделать:

dfPoputationResident = df.groupby('Zona')['Total_MSP'].sum()

вместо

dfPoputationResident = df.groupby('Zona')[['Total_MSP']].sum()

Я имею в виду, это работает для меня:

df = pd.DataFrame({'Zona':list('abcde'),
                   'Total_MSP':[1,2,3,4,5]})

fig, ax = plt.subplots()

colors = ['#1b9e77', '#a9f971', '#fdaa48','#6890F0','#A890F0']
df.plot.bar(x='Zona',y='Total_MSP',color=colors, ax=ax);

ax.legend(ax.patches, df['Zona'], loc=[1.01,0.5])

Вывод:

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