如何在同一标签下绘制多个列条形图

时间:2019-10-09 19:38:27

标签: python pandas numpy matplotlib seaborn

我要绘制数据框,其中包含许多列,每列都带有“ TRUE”或“ FALSE”标签(从Excel导入)。

一个类似的小例子是这样的:

df = pd.DataFrame({"a":["TRUE","FALSE","FALSE","TRUE","FALSE"],
"b":["TRUE","TRUE","FALSE","TRUE","TRUE"],
"c":["TRUE","FALSE","FALSE","FALSE","TRUE"],
"d":["FALSE","FALSE","TRUE","TRUE","FALSE"]})

我正在寻找一种方法来简要总结TRUE和FALSE值如何在列之间分配。理想情况下,将创建如下图所示的图形:

Example of what I'm looking for

但是我不确定如何创建它。我尝试过列表理解,例如尝试

sns.barplot([list(df[i].value_counts()) for i in df.columns])

但是得到完全不同的东西。我什至不需要知道如何制作图例,我只是将其包括在示例中,希望可以更好地描绘我要追求的目标。

2 个答案:

答案 0 :(得分:1)

您在这里:

df.stack().groupby(level=1).value_counts().unstack(0).plot.bar()

输出:

enter image description here

答案 1 :(得分:1)

您已经尝试了更有效的方法。如果要缩放到更大的帧,则应该计算每个系列的value_counts。您只需要更改plot

f = pd.concat(
      [df[s].value_counts() for s in df], axis=1, sort=False)

f.plot(kind='bar')