在matplotlib

时间:2019-02-14 10:04:57

标签: python pandas matplotlib charts enumerate

我的熊猫数据集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)

对于类别1,列出了以下百分比: enter image description here

对于类别4,未列出百分比: Not lined up

问题可能是类别4中只有7个颜色组,而类别1中只有14个颜色组。如何调整代码,以便无论我设置为“ s”(即类别),都是百分比线上吗?

0 个答案:

没有答案