我的熊猫数据集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
这是下面的代码,其中的图形显示了其中两个类别。在某些类别上,百分比都垂直排列,但在其他类别上,百分比是疯狂的。
#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)
问题可能是类别4中只有7个颜色组,而类别1中只有14个颜色组。如何调整代码,以便无论我设置为“ s”(即类别),都是百分比线上吗?