我正试图根据不同类别的计数(数据框中的“类”列)生成一个堆叠条形图。
我的数据也按另一个类别分组(“STRAT”列)。
我有实际的数字绘图,但我想得到这些作为比例,以100%的总和。即,所以所有的酒吧是图表的全高,像一个垂直饼图,为每一个'STRAT'类别。
像这样:x1c 0d1x
下面是我所尝试的和结果。
样本是大型数据集中的一小部分。
import pandas as pd
df_test= pd.read_excel('df.xlsx')
df_test
From To Interval (m) Class STRAT Total %S
308 309 1 PAF CBC 4.15
309 310 1 PAF CBC 3.76
320 321 1 UC CBC 0.85
330 331 1 UC CBC 0.698
342 343 1 NAF LBB 0.259
376 377 1 NAF LBB 0.395
412 413 1 UC LBB 1.19
51 52 1 PAF UBB 2.27
420 420.5 0.5 UC UAB 2.85
189 190 1 PAF LBB 1.52
520 521 1 NAF UAB 1.45
632 633 1 NAF UAB 0.0615
644 645 1 NAF UAB 0.178
df_test.groupby(['STRAT', 'Class']).size().unstack().plot.bar(stacked=True)
这将显示一个堆叠条形图,但未缩放到100%
我找不到一种简洁的方法将“Class count/total_counts”计算放入代码中以获得百分比而不是数字。
1条答案
按热度按时间djmepvbi1#
您可以使用matplotlib执行许多操作来强制缩放y轴,以便将所有内容归一化为100%,如下所示:100% Stacked Bar Chart in MatPlotLib
然而,您的问题可以更简单地解决。
如果这是具有两个关键列(类和STRAT)的 Dataframe :
然后,您可以通过以下方式轻松计算百分比:
最后,您可以完全按照代码中的方式进行绘图: