Мой набор данных 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 проценты выстроены:
Для категории 4 проценты не выстроены в ряд:
Проблема может заключаться в том, что в категории 4 имеется только 7 цветовых групп по сравнению со всеми14 в категории 1. Как я могу настроить код так, чтобы все, что я установил как 's' (т.е. категория), выстраивалось в процентах?