Matplotlib:在单个图上绘制两个或更多列的计数图

suk*_*lit 3 python matplotlib seaborn

我的dataFrame,df:

Sno | Attribute_1   | Attribute_2   | Attribute_3
__________________________________________________
1   | option_1      | option_3      |option_2
2   | option_1      | option_1      |option_1
3   | option_2      | option_2      |option_2
4   | option_1      | option_1      |option_3
5   | option_3      | option_2      |option_2
6   | option_3      | option_3      |option_1
7   | option_1      | option_3      |option_2
Run Code Online (Sandbox Code Playgroud)

此处Attribute_1,Attribute_2和Attribute_3包含分类数据-每行的option_1或option_2或option_3。

我想在所有属性的同一图上创建一个计数图。我可以通过以下方式在一列中执行此操作:

sns.countplot(x="Attribute_1", data=df);
Run Code Online (Sandbox Code Playgroud)

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

Imp*_*est 7

Seaborn通常适用于长格式数据集。即,您将有两列,而不是3个列,每个属性具有不同的选项,一列用于选项,一列用于属性。可以通过轻松创建pd.melt。然后hue可以在“选项”列上使用该值:

sns.countplot(x="variable", hue="value", data=pd.melt(df))
Run Code Online (Sandbox Code Playgroud)

完整的例子:

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

a= np.random.choice(["option_{}".format(i) for i in [1,2,3]], size=(12,3))
df = pd.DataFrame(a, columns=["Attribute_{}".format(i) for i in list("ABC")])

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

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

同样,您可以互换xhue

sns.countplot(x="value", hue="variable", data=pd.melt(df))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明