Python 分组数据帧的Seaborn Swarmlot

Python 分组数据帧的Seaborn Swarmlot,python,pandas,seaborn,pandas-groupby,Python,Pandas,Seaborn,Pandas Groupby,当我有这样一个数据帧时: import pandas as pd import seaborn as sns import random random.seed(0) df = pd.DataFrame({"Data":[random.random() for i in range(100)], "Cluster":[random.randint(0,10) for i in range(100)]}) 我可以很容易地将seaborn作为箱线图绘制集群: sns.boxplot(df["D

当我有这样一个数据帧时:

import pandas as pd
import seaborn as sns
import random

random.seed(0)

df = pd.DataFrame({"Data":[random.random() for i in range(100)], "Cluster":[random.randint(0,10) for i in range(100)]})
我可以很容易地将seaborn作为箱线图绘制集群:

sns.boxplot(df["Data"], groupby=df["Cluster"])
这给了我类似的东西:

不幸的是,seaborn Swarmlot没有groupby关键字。那么,如何方便地将此数据帧绘制为分组的Swarmlot呢?我想要与所示相同的图形,仅使用Swarmlots而不是boxplots。我玩了groupby对象本身:

df.groupby(by="Cluster")

到目前为止,我无法说服seaborn接受它

我认为您不需要
groupby
-您只需要将集群指定为x值,将数据指定为y值:

sns.swarmplot(data=df, x="Cluster", y="Data")
给你:

但是,如果您想使用其他类别的颜色,例如

df = pd.DataFrame({"Data":[random.random() for _ in range(100)],
                   "Cluster":[random.randint(0,10) for _ in range(100)],
                   "Category": [random.choice(("A", "B")) for _ in range(100)]})
然后可以使用
hue
参数,如下所示:

sns.swarmplot(data=df, x="Cluster", y="Data", hue="Category")
并获得:


嗯,这比预期的要容易。