如何将堆叠条形图中的整数值表示为百分比

3

请帮忙,

A、B和C是列。

X、Y、Z、Q、R是我的索引值。

我想在Python(Matplotlib)中制作一个堆积条形图,该图计算每个市场的每个OUT_CAUSE的归一化百分比值,并在图表中表示它们。

 OUT_CAUSE  A   B   C   
 MARKET                                             
 X  12.0    11.0    4.0
 Y  9.0     12.0    3.0
 Z  16.0    40.0    1.0
 Q  23.0    19.0    3.0
 R  17.0    15.0    2.0

图表的 X 轴应该是市场

图表的 Y 轴应该是每个市场 OUT_CAUSE 的贡献百分比。

所有百分比之和应该等于100。


我使用这个来表示直接数字:

df(kind='bar', stacked=True ,figsize=(8, 8));

2个回答

2
您可以使用循环来为所有列创建百分比:
for colname in df.columns: 
    colsum = sum(df[colname])
    df[colname+'%'] = round(100*df[colname]/colsum,1)  # create new column for %ages

输出:

      A     B    C    A%    B%    C%
X  12.0  11.0  4.0  15.6  11.3  30.8
Y   9.0  12.0  3.0  11.7  12.4  23.1
Z  16.0  40.0  1.0  20.8  41.2   7.7
Q  23.0  19.0  3.0  29.9  19.6  23.1
R  17.0  15.0  2.0  22.1  15.5  15.4

您可以使用以下命令创建堆叠条形图:
df.iloc[:,3:].T.plot.bar(stacked=True, rot=0)
plt.show()

enter image description here

如果您无法计算列数,可以通过存在%字符来过滤列名:

colnames = list(filter(lambda x: '%' in x, df.columns.tolist()))
df[colnames].T.plot.bar(stacked=True, rot=0)
plt.show()

1
一个简单(但可能不是最有效的)方法是创建一个新列:
df['percentage'] = df['A']/df['A'].sum()


然后,您只需绘制“百分比”列即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接