Python 如何使用seaborn(仅成对地块对角线)绘制单变量分布?

Python 如何使用seaborn(仅成对地块对角线)绘制单变量分布?,python,pandas,seaborn,Python,Pandas,Seaborn,仅使用seaborn绘制数据帧的单变量分布时,哪一种方法更像Python 导入seaborn作为sns 作为pd进口熊猫 将numpy作为np导入 将matplotlib.pyplot作为plt导入 data=pd.DataFrame( np.random.normal(0,1,size=(15,3)), 列=[“A”、“B”、“C”] ) sns.pairplot(数据)#显示对角线上的单变量分布,但添加其他图 plt.show() 结果: 我希望避免绘制不在对角线中的其他绘图。我可以使用

仅使用seaborn绘制数据帧的单变量分布时,哪一种方法更像Python

导入seaborn作为sns
作为pd进口熊猫
将numpy作为np导入
将matplotlib.pyplot作为plt导入
data=pd.DataFrame(
np.random.normal(0,1,size=(15,3)),
列=[“A”、“B”、“C”]
)
sns.pairplot(数据)#显示对角线上的单变量分布,但添加其他图
plt.show()
结果:

我希望避免绘制不在对角线中的其他绘图。我可以使用matplotlib和子绘图来实现这一点,但我确实认为有一种更为pythonic和美丽的方法,基于seaborn,来实现这一点。我阅读了文档并找到了
sns.FacetGrid
,这可能会有所帮助(?),但我不知道如何使用它。我不明白它的参数
col


有人能帮我吗?非常感谢

您需要首先长时间透视数据,以便可以将列拆分为多个方面:

data.melt()

    variable    value
0   A   -0.510632
1   A   0.634505
2   A   1.158468
3   A   1.095242
4   A   -0.105571
5   A   1.385932
6   A   1.305856
7   A   -1.100260
8   A   -0.829865
9   A   1.094065
10  A   -0.380359
11  A   -1.394960
12  A   0.263192
13  A   -0.889774
14  A   0.427633
15  B   -0.983942
16  B   -0.109396
17  B   -0.392132
18  B   0.869097
19  B   0.921728
20  B   0.837788
21  B   -0.279346
[...]
将其传递到
FaceGrid
并调用
histplot

g = sns.FacetGrid(data.melt(), col="variable")
g.map(sns.histplot, "value")

使用最新版本的seaborn,您可以调用@mwaskom的评论:

sns.displot(data.melt(),col="variable",x="value",aspect=0.6)

漂亮。非常感谢。与
sns.FacetGrid
+
sns.histplot
相比,更喜欢
sns.displat