seaborn 中分组数据的联合图

Joint plot for groupby datas on seaborn

我有一个如下所示的数据框:

In[1]: df.head()
Out[1]:
dataset  x     y
   1     56   45
   1     31   67
   7     22   85
   2     90   45
   2     15   42

还有大约 4000 行。 x 和 y 按数据集分组。我正在尝试使用 seaborn 分别为 each 数据集绘制联合图。这是我目前能想到的:

import seaborn as sns

g = sns.FacetGrid(df, col="dataset", col_wrap=3)
g.map_dataframe(sns.scatterplot, x="x", y="y", color = "#7db4a2")
g.map_dataframe(sns.histplot, x="x", color = "#7db4a2")
g.map_dataframe(sns.histplot, y="y", color = "#7db4a2")
g.add_legend();

但都是重叠的。如何为子图中的每个数据集制作合适的联合图?谢谢你的先进和欢呼!

您可以在 数据集 列上使用 groupby,然后使用 sns.jointgrid(),最后将您的散点图和 KDE 图添加到联合网格。

这是一个使用带有 numpy 的随机种子生成器的示例。我制作了三个“数据集”和随机 x,y 值。请参阅 Seaborn jointgrid documentation 了解自定义颜色等的方法。

### Build an example dataset
np.random.seed(seed=1)
ds = (np.arange(3)).tolist()*10
x = np.random.randint(100, size=(60)).tolist()
y = np.random.randint(20, size=(60)).tolist()
df = pd.DataFrame(data=zip(ds, x, y), columns=["ds", "x", "y"])

### The plots
for _ds, group in df.groupby('ds'):
    group = group.copy()
    g = sns.JointGrid(data=group, x='x', y='y')
    g.plot(sns.scatterplot, sns.kdeplot)