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

2024-05-16 11:12:23 发布

您现在位置:Python中文网/ 问答频道 /正文

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

数据是按模型(或站点)组织的,我还包括了两列,用于区分寒冷或温暖季节['season']之间的数据,以及数据来自的图层['layer']

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

  1. 按季节对数据进行颜色编码(我在脚本中设置了 (远)
  2. 底部三角形仅由0厘米到30厘米的数据组成 土层,以及仅由来自 30cm至300cm土层

我已经了解了如何一次为数据集的一个三角形/部分创建散点图矩阵,例如在本例中:

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

相关文件可在此处找到:

  1. dframe_btm
  2. dframe_top
  3. 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,并将数据的一部分设置为显示在map upper中,另一部分显示在map lower中,但是我目前没有看到显式分割数据的方法。例如,是否有一种方法可以做到以下几点

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

Tags: csv数据mastermapreadtop矩阵pd
1条回答
网友
1楼 · 发布于 2024-05-16 11:12:23

你很接近。您需要定义一个进行拆分的自定义函数:

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

enter image description here

相关问题 更多 >