Добавление процентных значений на горизонтальные гистограммы в matplotlib - PullRequest
0 голосов
/ 14 февраля 2019

Мой набор данных pandas, df4, состоит из 14 цветовых групп (зеленый, синий и т. Д.) И 12 категорий (1, 2 и т. Д.).Я создаю горизонтальную гистограмму для каждой категории.

print(df4.head())
 BASE VOLUME Color Group  Type
0        6.0       GREEN  1
1        3.5       GREEN  1
2        2.5       GREEN  2
3        1.5       GREEN  2
4        2.5       BLUE   4

Вот код ниже, с тем, как график выглядит для 2 категорий.В некоторых категориях все проценты выстроены вертикально, а в других - дикие.

#groupby / pivot transformation, and reindex
s='1'
dfrr = df4[df4['Type'] == s]
df5 = dfrr.groupby(['Color Group']).sum().sort_values("BASE VOLUME", ascending=False)
data = df5.reset_index().iloc[:,[0,2]]
data.columns = ['Color Group', 'BASE VOLUME']
x= data['BASE VOLUME']
y= data['Color Group']

data2 = data
data2['BASE VOLUME %'] = data2['BASE VOLUME']
data2 = data2.iloc[:,[0,2]]
data2['BASE VOLUME %'] = 100*data2['BASE VOLUME %']/(sum(data2['BASE VOLUME %']))

plt.figure(figsize=(10,6))

clrs = ['red' if (x > 10) else 'gray' for x in data2['BASE VOLUME %']]
ax = sns.barplot(x,y, data=data2, palette=clrs)
ax.set_xlabel('Base Volume',fontsize=15)
ax.set_ylabel('Color Group',fontsize=15)
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)

for i, v in enumerate(data2['BASE VOLUME %']):
    ax.text(v + 0, i + 0.15, str("{0:.1f}%".format(v)), color='black', fontweight='bold', fontsize=14)

Для категории 1 проценты выстроены: enter image description here

Для категории 4 проценты не выстроены в ряд: Not lined up

Проблема может заключаться в том, что в категории 4 имеется только 7 цветовых групп по сравнению со всеми14 в категории 1. Как я могу настроить код так, чтобы все, что я установил как 's' (т.е. категория), выстраивалось в процентах?

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