单个条形图上多个分类变量的子图计数

Subplot counts of multiple categorical variables on a single bar chart

我正在尝试从多个数据框列创建一个条形图,每个列都是一个分类变量(都基于相同的水平)。我希望它显示每一列中出现的级别数。

下面的代码实现了我想要的,但是在 4 个不同的条形图上。我希望这一切都在一个地块上,所以条形图并排(labels/legend 会很好)。我正在尝试使用 matplotlib 获得干净、简单的解决方案,但到目前为止我还想不通。有帮助吗?

谢谢!

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.DataFrame({"A":['cow','pig','horse','goat','cow'], "B":['cow','pig','horse','cow','goat'], "C":['pig','horse','goat','pig','cow'], "D":['cow','pig','horse','horse','goat'], "E":['pig','horse','goat','cow','goat']})

levels = np.sort(df['A'].unique()) 

df.A.value_counts()[levels].plot(kind='bar')
df.B.value_counts()[levels].plot(kind='bar')
df.C.value_counts()[levels].plot(kind='bar')
df.D.value_counts()[levels].plot(kind='bar')

您应该应用 pd.series.value_counts 并绘制条形图,堆叠或非堆叠。

如果您需要单独的每一列;

df.apply(pd.Series.value_counts).plot(kind='bar')

如果您需要堆叠它们;

df.apply(pd.Series.value_counts).plot(kind='bar', stacked=True)