使用多个数据集创建 seaborn 散点图矩阵 (PairGrid)

Posted

技术标签:

【中文标题】使用多个数据集创建 seaborn 散点图矩阵 (PairGrid)【英文标题】:Create a seaborn scatterplot matrix (PairGrid) using multiple datasets 【发布时间】:2021-09-08 10:26:48 【问题描述】:

我有一个数据框,其中包含来自几个不同模型的土壤温度数据,我想创建一个散点图矩阵。数据框如下所示:

dataframe structure

数据按模型(或站点)组织,我还包括了几列来区分寒冷或温暖季节 ['Season'] 以及层 ['Layer'] 之间发生的数据数据来自。

我的目标是创建一个具有以下特征的散点图矩阵:

    按季节颜色编码的数据(我已经在脚本中设置了 远) 底部三角形仅包含从 0cm 到 30cm 的数据 土壤层,上三角只包含来自 30cm 到 300cm 土层。

我已经弄清楚如何一次为数据集的一个三角形/部分创建一个散点图矩阵,例如在这个例子中:

Scatterplot for top 30cm

但是我不确定如何在每个三角形中使用不同的数据部分。

相关文件可以在这里找到:

    dframe_btm dframe_top dframe_master

这里是相关代码

dframe_scatter_top = pd_read.csv(dframe_top.csv)
dframe_scatter_btm = pd_read.csv(dframe_btm.csv)
dframe_master = pd.read_csv(dframe_master.csv)
scatter1 = sn.pairplot(dframe_scatter_top,hue='Season',corner='True')
sns.set_context(rc="axes.labelsize":20, font_scale=1.0)
sns.set_context(rc="legend.fontsize":18, font_scale=1.0)
scatter1.set(xlim=(-40,40),ylim=(-40,40))
plt.show()

我怀疑诀窍是使用 PairGrid,并将数据的一部分设置为显示在地图上部,另一部分显示在地图下部,但是我目前没有看到明确拆分数据的方法。例如,有没有办法做到以下几点?

scatter1 = sns.PairGrid(dframe_master)
scatter1.map_upper(#only plot data from 0-30cm)
scatter1.map_lower(#only plot data from 30-300cm)

【问题讨论】:

【参考方案1】:

你已经接近了。您需要定义一个执行拆分的自定义函数:

import seaborn as sns
df = sns.load_dataset("penguins")

def scatter_subset(x, y, hue, mask, **kws):
    sns.scatterplot(x=x[mask], y=y[mask], hue=hue[mask], **kws)

g = sns.PairGrid(df, hue="species", diag_sharey=False)
g.map_lower(scatter_subset, mask=df["island"] == 'Torgersen')
g.map_upper(scatter_subset, mask=df["island"] != 'Torgersen')
g.map_diag(sns.kdeplot, fill=True, legend=False)
g.add_legend()

【讨论】:

以上是关于使用多个数据集创建 seaborn 散点图矩阵 (PairGrid)的主要内容,如果未能解决你的问题,请参考以下文章

seaborn 的 lmplot 的输出没有绘制散点图和线性回归

seaborn笔记:可视化统计关系(散点图折线图)

python--seaborn散点图

用seaborn绘制散点图

使用 Seaborn 散点图绘制最近的数据点

有啥方法可以正确聚合时间序列数据以使用 matplotlib/seaborn 制作散点图?