Seaborn:多个类别的多条图

Seaborn: multibar plot of multiple categories

我有一个数据框,它基本上是一个技术人员列表和在他们的工作中经过评估的几个类别(值 1 表示通过评估,0 表示未通过)。每次评估都会重复每位技术人员。

在字典形式中它将是 [ {"Name":"A","cat1":1,"cat2":0},{"Name":"A","cat1":1, "cat2":1},{"名称": "B", "cat1":0, "cat2":1}]

我想创建一个图表,如猫图,其中每个技术人员都有一组条形图,每个条形图代表该类别的正确评估数。

我是否需要改革我的所有数据集才能做到这一点?我知道可以使用“色调”参数来创建条形图组,但是将一个数据属性分成多列,我想为每个属性创建一列。有没有办法做到这一点,或者我需要为此完全重新格式化我的数据集?

为了使用hue,Seaborn 更喜欢“长格式”的数据。您可以使用 sns.barplotestimator=sum 来计算正确评估的总数。

from matplotlib import pyplot as plt
from matplotlib.ticker import MultipleLocator
import seaborn as sns
import pandas as pd

df = pd.DataFrame([{"Name": "A", "cat1": 1, "cat2": 0},
                   {"Name": "A", "cat1": 1, "cat2": 1},
                   {"Name": "B", "cat1": 0, "cat2": 1}])
df_long = df.melt(id_vars="Name", var_name='Category', value_name='Correct')
sns.set_style('whitegrid')
ax = sns.barplot(data=df_long, x='Name', y='Correct', hue='Category', estimator=sum, ci=None)
ax.yaxis.set_major_locator(MultipleLocator(1))
sns.despine()
plt.tight_layout()
plt.show()