Python 当x和y是具有条件的同一变量时的Seaborn散射图

Python 当x和y是具有条件的同一变量时的Seaborn散射图,python,pandas,seaborn,facet,Python,Pandas,Seaborn,Facet,我有以下数据集: dat = [] import numpy as np import math for r in range(0,100): for c1 in ["A", "B"]: for c2 in ["x", "y", "z"]: rec = { "cat1": c1,

我有以下数据集:

dat = []

import numpy as np
import math

for r in range(0,100):
    for c1 in ["A", "B"]:
        for c2 in ["x", "y", "z"]:
            rec = {
                "cat1": c1,
                "cat2" : c2,
                "value" : np.random.rand(1)[0]
            }
            dat.append(rec)

df = pd.DataFrame(dat)
df
我能画出好看的直方图:

grid = sns.displot(
    df, 
    x="value", 
    col="cat1", 
    row="cat2",
    facet_kws=dict(margin_titles=True),
)
for ax in grid.axes.flat:
    ax.axvline(0, 0, 1, color="black", lw=1, linestyle="--") 

但我在寻找一个散点图,其中cat1==a时“x”为“value”,cat1==B时“y”为“value”

这不符合我的要求:

sns.relplot(
    data=df,
    x=df.query("cat1 == 'A'")['value'],
    y=df.query("cat1 == 'B'")['value'],
    col="cat1",    
    row="cat2",    
    facet_kws=dict(margin_titles=True),
    kind="scatter"
)

这也不是:

sns.relplot(
    data=df,
    x='value',
    y='value',
    col="cat1",    
    row="cat2",    
    facet_kws=dict(margin_titles=True),
    kind="scatter"
)

我希望它看起来更像这样:


x和y都在绘制“value”变量,但它们是根据cat1=“A”还是cat1=“B”进行分割的。这个特殊的图形是用子图而不是面绘制的——这就是为什么0处的垂直线没有对齐(我试图在这里使用面散点图来精确地得到它)。

要对齐子图,可以使用
fig,axs=plt.subplot(nrows=3,sharex=True)
sns.relplot(
    data=df,
    x='value',
    y='value',
    col="cat1",    
    row="cat2",    
    facet_kws=dict(margin_titles=True),
    kind="scatter"
)