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 grouped bar plot add labels)