繁体   English   中英

如何使用 seaborn 进行 plot 单变量分布(仅对角线)?

[英]How to plot univariate distribution using seaborn (pairplot diagonal only)?

仅使用 seaborn 的 dataframe 的单变量分布 plot 的单变量分布是哪种更 Pythonic 的方式?

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.DataFrame(
     np.random.normal(0,1,size=(15,3)),
     columns = ["A","B","C"]
)

sns.pairplot(data) # shows univariate distribution in the diagonal but add other plots 
plt.show()

结果:

代码结果

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

有人能帮我吗? 非常感谢 !

您需要先将您的数据长 pivot,以便您可以将列拆分为方面:

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
[...]

您将其传递给FacetGrid并调用histplot

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

在此处输入图像描述

使用最新版本的 seaborn,您可以调用displot ,正如@mwaskom 评论的那样:

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

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM