python - 如何使用 seaborn 绘制单变量分布(仅对角线对角线)?
问题描述
仅使用 seaborn 绘制数据帧的单变量分布的更 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 和 subplots 来做到这一点,但我确实认为有一种基于 seaborn 的更 Pythonic 和更漂亮的方式来实现这一点。我阅读了文档并找到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
[...]
您将其传递给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)
推荐阅读
- c# - 从客户端将数据和文件发布到 Web api 中检测到潜在危险的 Request.Form 值
- ios - OKta + react native + OKta 自定义登录页面 + okta 离线登录
- serial-port - 为什么 PPP over Serial 不响应 ping 请求?
- python - scrapy递归抓取网站
- php - JMS 序列化程序不会将格式应用于新创建的对象
- flutter - 如何在卡片上创建 TextField
- node.js - 使用 node.js 上传 HTTP 文件正在更改文件
- android - React 本机应用程序仅在发布版本时崩溃
- javascript - 这两个javascript代码片段有什么区别?
- c# - 在 Word 自动化中实现文本行的快捷方式