matplotlib 在单个图上绘制两个或多个列的计数图

3gtaxfhh  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(147)

我的数据框,df:

  1. Sno | Attribute_1 | Attribute_2 | Attribute_3
  2. __________________________________________________
  3. 1 | option_1 | option_3 |option_2
  4. 2 | option_1 | option_1 |option_1
  5. 3 | option_2 | option_2 |option_2
  6. 4 | option_1 | option_1 |option_3
  7. 5 | option_3 | option_2 |option_2
  8. 6 | option_3 | option_3 |option_1
  9. 7 | option_1 | option_3 |option_2

这里Attribute_1、Attribute_2和Attribute_3包含分类数据-每行的选项_1、选项_2或选项_3。
我想在同一个图上为所有属性创建一个计数图。我可以通过以下方式为一列创建计数图:

  1. sns.countplot(x="Attribute_1", data=df);

我可以单独创建每个属性,但我正在寻找的是,在同一个图上,我可以有所有属性的计数图。即X轴将有属性,每个属性将有三个计数图。

myzjeezk

myzjeezk1#

Seaborn通常最适合长格式数据集。也就是说,不是3列,每个属性有不同的选项,而是两列,一列用于选项,一列用于属性。这可以很容易地通过pd.melt创建。然后,hue值可以用于“选项”列:

  1. sns.countplot(x="variable", hue="value", data=pd.melt(df))

完整示例:

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. import seaborn as sns
  5. a= np.random.choice(["option_{}".format(i) for i in [1,2,3]], size=(12,3))
  6. df = pd.DataFrame(a, columns=["Attribute_{}".format(i) for i in list("ABC")])
  7. sns.countplot(x="variable", hue="value", data=pd.melt(df))
  8. plt.show()

同样,您可以互换xhue

  1. sns.countplot(x="value", hue="variable", data=pd.melt(df))

展开查看全部

相关问题