seaborn中分组数据的联合图

Posted

技术标签:

【中文标题】seaborn中分组数据的联合图【英文标题】:Joint plot for groupby datas on seaborn 【发布时间】:2021-11-26 16:26:06 【问题描述】:

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

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 分别为 每个 数据集绘制联合图。到目前为止,这是我能想到的:

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();

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

【问题讨论】:

更新到 seaborn 0.11.2 并使用 seaborn.jointplot: sns.jointplot(data=df, x='x', y='y', hue='dataset')。此外,FacetGrid 是一个图形级别的图,目前没有包含子图形的选项。 嗯。你建议我应该如何解决这个问题? 【参考方案1】:

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

这是一个使用 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)

【讨论】:

以上是关于seaborn中分组数据的联合图的主要内容,如果未能解决你的问题,请参考以下文章

Python:分组数据的seaborn条形图

具有不同长度数组的seaborn联合图

使用 seaborn 对数据进行分组后的条形图

使用单个数据帧的多个标签调整图例 Seaborn 联合图

Python使用seaborn可视化分组条形图并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)

将分割图(点图)添加到分组箱线图 - Pandas 和 Seaborn