如何使熊猫分类堆积条形图比例为 100%

Posted

技术标签:

【中文标题】如何使熊猫分类堆积条形图比例为 100%【英文标题】:How do I make pandas catagorical stacked bar chart scale to 100% 【发布时间】:2019-10-08 15:33:53 【问题描述】:

我正在尝试根据不同类别的计数(我的数据框中的“类”列)生成堆积条形图。

我的数据也按另一个类别(“STRAT”列)分组。

我绘制了实际数字,但我想将这些数字作为总数的 100% 获得。 IE。因此,对于每个“STRAT”类别,所有条形图都是图表的整个高度,就像垂直饼图一样。

像这样:

以下是我尝试过的方法和结果。

样本是大型数据集的一小部分。

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%

我找不到将“类计数/总计数”计算放入代码以获取百分比而不是数字的简洁方法。

【问题讨论】:

【参考方案1】:

您可以使用 matplotlib 做很多事情来强制缩放 y 轴,以便将所有内容标准化为 100%,如下所示: 100% Stacked Bar Chart in MatPlotLib

但是,您的问题可以更简单地解决。

如果这是您的具有两个关键列 Class 和 STRAT 的数据框:

import pandas as pd
import numpy as np
df = pd.DataFrame('Class': 2*['a', 'b', 'c', 'd'],'STRAT': 'x', 'y', 'x', 'z','y','x','z','w'],'value': np.random.randint(0, int(1e2),8))

然后您可以通过这种方式轻松计算 %ges:

df_pct = (df.groupby(['STRAT','Class'])['value'].count()/df.groupby(['STRAT'])['value'].count())

您最终可以完全按照您在代码中的方式进行绘图:

df_pct.unstack().plot.bar(stacked=True)

【讨论】:

所以我使用哪一列作为“值”并不重要,只要每一行都有一个值,因为它计算的是条目而不是数值? 正确 - 只要条目不是“nans”,应该是好的。

以上是关于如何使熊猫分类堆积条形图比例为 100%的主要内容,如果未能解决你的问题,请参考以下文章

带有分组条形的熊猫堆积条形图[重复]

情节堆积条形图熊猫数据框

使D3堆积条形图填充父SVG容器

spss如何删除堆积条形图中的某块数据

一个定量变量和一个分类变量的堆积条形图

使用 C++ 使用 openGL 以图形方式表示堆积条形图