【论文绘图】连续单变量

博客主要讲解用seaborn绘制分布图,涉及displot和histplot。介绍了直方图中选择bin大小、携带更多信息、归一化统计的方法,还提及核密度估计中选择平滑度、多变量KDE、二元分布及相关性分析等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直方图

下面讲解用seaborn绘制分布图。seaborn中的displot和histplot是一样的底层代码。

penguins = sns.load_dataset("penguins")
sns.displot(penguins, x="flipper_length_mm")

选择bin大小
sns.displot(penguins, x="flipper_length_mm", bins=20)

不能过度依赖seaborn自动选择的并大小,否则可能出现这种尴尬的缝隙:
在这里插入图片描述

这时可以这样处理:

sns.displot(tips, x="size", bins=[1, 2, 3, 4, 5, 6, 7])

# 以下代码等价
sns.displot(tips, x="size", discrete=True)

image.png
也可以自己选择缝隙宽度:

sns.displot(tips, x="day", shrink=.8)

用直方图携带更多信息
sns.displot(penguins, x="flipper_length_mm", hue="species")

image.png
这样可能看不清楚

sns.displot(penguins, x="flipper_length_mm", hue="species", element="step")

image.png
这样就好多了。
element的参数值还可以是‘stack’, ‘dodge’(保证没有重叠但是只适用于hue水平数较少的情况) .
当然,histplot也可以使用col,row参数绘制多个子图。

归一化的直方图统计

当每个子类的样本数不同时,以上方法绘制的直方图是不合理的。

sns.displot(penguins, x="flipper_length_mm", hue="species", stat="density", common_norm=False)

common_norm=False 保证了每个子类分别归一化,而不是所有样本一起归一化。
image.png
另一个选择是归一化bar的高度使得高度相加为1. 这样可解释性更强。

sns.displot(penguins, x="flipper_length_mm", hue="species", stat="probability")

在这里插入图片描述

核密度估计
sns.displot(penguins, x="flipper_length_mm", kind="kde")

image.png

选择平滑度

太高的平滑度可能直接抹去有价值的特征,太低的平滑度又可能画出噪音。

sns.displot(penguins, x="flipper_length_mm", kind="kde", bw_adjust=.25)

image.png

多变量的KDE
sns.displot(penguins, x="flipper_length_mm", hue="species", kind="kde")
sns.displot(penguins, x="flipper_length_mm", hue="species", kind="kde", multiple="stack")
sns.displot(penguins, x="flipper_length_mm", hue="species", kind="kde", fill=True)

二元分布
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", kind="kde")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", hue="species")
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", binwidth=(2, .5))
sns.displot(penguins, x="bill_length_mm", y="bill_depth_mm", binwidth=(2, .5), cbar=True)
sns.jointplot(data=penguins, x="bill_length_mm", y="bill_depth_mm")

image.png

sns.jointplot(
    data=penguins,
    x="bill_length_mm", y="bill_depth_mm", hue="species",
    kind="kde"
)

在这里插入图片描述

相关性分析
sns.pairplot(penguins)

image.png

g = sns.PairGrid(penguins)
g.map_upper(sns.histplot)
g.map_lower(sns.kdeplot, fill=True)
g.map_diag(sns.histplot, kde=True)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__心似大海__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值