[英]How to produce a stacked bar plot for the value counts of all columns
我的 dataframe 有超过 10 列,每列都有诸如 yes/no/na/not specified 之类的值。
我想计算每列中出现的次数并创建堆积条形图。
下面是我需要的图像:
是的,这是可能的。 但是您需要先重新格式化您的数据。
这是我在此示例中使用的数据集。 它在列中有标签,并以 1000 个随机的是、否或可能的响应作为值。
asthma boneitis diabetes pneumonia
0 No No Yes Maybe
1 No No No Yes
2 No No No No
3 Yes No No Maybe
4 Yes No No Maybe
.. ... ... ... ...
995 No No Yes No
996 Maybe Yes Yes Yes
997 No No No Yes
998 No No No No
999 No No Maybe No
为了正确格式化 plot 的数据,请执行以下操作:
df2 = df.stack().groupby(level=[1]).value_counts().unstack()
# Preferred order of stacked bar elements
stack_order = ['Yes', 'Maybe', 'No']
df2 = df2[stack_order]
此时,数据看起来是这样的:
Yes Maybe No
asthma 83 83 834
boneitis 174 173 653
diabetes 244 260 496
pneumonia 339 363 298
现在您已准备好 plot 数据。 这是执行此操作的代码:
df2.plot.bar(rot=0, stacked=True)
我使用rot=0
来避免旋转文本标签(它们通常呈 45 度角),并使用stacked=True
来生成堆叠条形图。
plot 看起来像这样:
生成测试数据集的代码:
import pandas as pd
import numpy as np
categories = [
'asthma',
'boneitis',
'diabetes',
'pneumonia',
]
distribution = {
cat: (i + 1) / 12
for i, cat in enumerate(categories)
}
df = pd.DataFrame({
cat: np.random.choice(['Yes', 'Maybe', 'No'], size=1000, p=[prob, prob, 1 - 2 * prob])
for cat, prob in distribution.items()
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.