如何以百分比表示堆积条形图整数值
How to represents stacked bar plot integer values in percentage
请帮忙,
A、B 和 C 是列
X、Y、Z、Q、R 是我的索引值
我想在 python(matplot 库)中制作一个堆积条形图,计算每个市场每个 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 轴应为 MARKET
图表的 Y 轴应该是每个市场 OUT_CAUSE 的贡献百分比。
% 的总和应等于 100
我用它来表示直数
df(kind='bar', stacked=True ,figsize=(8, 8));
一个简单(但可能不是最有效)的方法是简单地创建一个新列:
df['percentage'] = df['A']/df['A'].sum()
然后您只需绘制 'percentage' 列。
您可以使用循环为所有列创建 %age:
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()
如果您无法计算列数,可以通过是否存在 %
个字符过滤掉列名:
colnames = list(filter(lambda x: '%' in x, df.columns.tolist()))
df[colnames].T.plot.bar(stacked=True, rot=0)
plt.show()
请帮忙,
A、B 和 C 是列
X、Y、Z、Q、R 是我的索引值
我想在 python(matplot 库)中制作一个堆积条形图,计算每个市场每个 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 轴应为 MARKET 图表的 Y 轴应该是每个市场 OUT_CAUSE 的贡献百分比。
% 的总和应等于 100
我用它来表示直数
df(kind='bar', stacked=True ,figsize=(8, 8));
一个简单(但可能不是最有效)的方法是简单地创建一个新列:
df['percentage'] = df['A']/df['A'].sum()
然后您只需绘制 'percentage' 列。
您可以使用循环为所有列创建 %age:
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()
如果您无法计算列数,可以通过是否存在 %
个字符过滤掉列名:
colnames = list(filter(lambda x: '%' in x, df.columns.tolist()))
df[colnames].T.plot.bar(stacked=True, rot=0)
plt.show()