将不同的seaborn镶嵌面网格组合成一个p

2024-10-01 11:26:06 发布

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

我有三个不同的数据集,我在其中生成一个facetplot,每个

a = sns.FacetGrid(data1, col="overlap",  hue="comp")
a = (g.map(sns.kdeplot, "val",bw=0.8))

b = sns.FacetGrid(data2, col="overlap",  hue="comp")
b = (g.map(sns.kdeplot, "val",bw=0.8))

c = sns.FacetGrid(data3, col="overlap",  hue="comp")
c = (g.map(sns.kdeplot, "val",bw=0.8))

每一个图在一行有三个子图,所以我总共有九个图。在

我想结合这些情节,在这样的子情节设置

^{pr2}$

我怎么能做到呢?在


Tags: 数据mapcolvalhuebwsns情节
1条回答
网友
1楼 · 发布于 2024-10-01 11:26:06

FacetGrid创建自己的图形。把几个数字合并成一个不是一件容易的事。此外,没有子图行可以添加到地物中。所以需要单独操纵轴。在

也就是说,可能更容易找到解决办法。E、 如果要显示的数据帧的结构与问题代码中的结构相同,则可以将这些数据帧组合成一个具有新列的单个帧,并将其用作facet网格的row属性。在

import numpy as np; np.random.seed(3)
import pandas as pd
import seaborn.apionly as sns
import matplotlib.pyplot as plt

def get_data(n=266, s=[5,13]):
    val = np.c_[np.random.poisson(lam=s[0], size=n),
                np.random.poisson(lam=s[1], size=n)].T.flatten()
    comp = [s[0]]*n +  [s[1]]*n
    ov = np.random.choice(list("ABC"), size=2*n)
    return pd.DataFrame({"val":val, "overlap":ov, "comp":comp})

data1 = get_data(s=[9,11])
data2 = get_data(s=[7,19])
data3 = get_data(s=[1,27])

#option1 combine
for i, df in enumerate([data1,data2,data3]):
    df["data"] = ["data{}".format(i+1)] * len(df)

data = data1.append(data2)
data = data.append(data3)

bw = 2
a = sns.FacetGrid(data, col="overlap",  hue="comp", row="data")
a = (a.map(sns.kdeplot, "val",bw=bw ))
plt.show()

enter image description here

您还可以在数据帧和轴上循环以获得所需的结果。在

^{pr2}$

enter image description here

相关问题 更多 >