核密度图vs直方图:原理/差异/代码实现

核密度图和直方图均为数据可视化工具,能够呈现数据分布状况,不过它们在原理与表现形式上存在差异。下面将对它们的原理、差异进行详细介绍,并给出代码示例。

1. 原理剖析

  • 直方图
    • 它把数据范围划分成若干个连续的小区间,也就是“箱子”。
    • 统计每个箱子内的数据点数量,以此来确定相应的频率或计数。
    • 最终用矩形条来展示这些统计结果,矩形条的高度代表频率或密度。
  • 核密度估计(KDE)
    • 这是一种非参数方法,用于对随机变量的概率密度函数进行估计。
    • 以每个数据点为中心放置一个核函数(像高斯核就是常用的一种),然后将所有核函数累加起来。
    • 累加后得到的平滑曲线就是概率密度函数的估计结果,曲线下方的总面积为 1。

2. 主要差异

对比项直方图核密度图
表现形式由离散的矩形条组成,矩形条之间可能存在间隙。是一条连续的平滑曲线。
数据平滑没有进行平滑处理,展示的是原始数据的分布情况。经过了平滑处理,能减少数据中的噪声影响。
参数影响对箱子的数量和宽度非常敏感,不同的设置可能会导致图形差异较大。对核函数的类型以及带宽参数比较敏感。
细节展示能够清晰地展示数据的具体分布区间。更侧重于展示数据分布的整体趋势。
适用场景适用于展示原始数据的分布,当数据量较小时也能较好地发挥作用。适合对分布形状进行比较,更便于观察数据的整体趋势。

3. 代码示例

下面为你提供 Python 语言绘制核密度图与直方图的代码示例:

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

# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300

# 生成示例数据(正态分布)
np.random.seed(42)
data = np.random.normal(loc=0, scale=1, size=1000)

# 创建画布
fig, axes = plt.subplots(1, 2, figsize=(12, 5))

# 绘制直方图
axes[0].hist(data, bins=30, density=True, alpha=0.7, color='skyblue')
axes[0].set_title('直方图')
axes[0].set_xlabel('值')
axes[0].set_ylabel('密度')

# 绘制核密度图
sns.kdeplot(data, ax=axes[1], color='orange', linewidth=2)
axes[1].set_title('核密度图')
axes[1].set_xlabel('值')
axes[1].set_ylabel('密度')

plt.tight_layout()
plt.show()

# 组合图:直方图 + 核密度图
plt.figure(figsize=(8, 6))
sns.histplot(data, bins=30, kde=True, stat='density', alpha=0.7, color='skyblue')
plt.title('直方图与核密度图组合')
plt.xlabel('值')
plt.ylabel('密度')
plt.show()

在这里插入图片描述
在这里插入图片描述

结果解读

  • 直方图:从直方图中可以看到,它通过矩形条直观地展示了数据在各个区间内的分布频率。矩形条越高,说明该区间内的数据点越多。
  • 核密度图:核密度图呈现出一条平滑的曲线,能够让我们更清晰地观察到数据分布的整体形状,比如是否呈现单峰、双峰等特征,以及数据的集中趋势和离散程度。
  • 组合图:组合图将直方图和核密度图结合在一起,既能展示数据的原始分布情况,又能体现出数据分布的平滑趋势,有助于我们从多个角度分析数据。

通过这些可视化工具,我们可以更好地理解数据的分布特征,为后续的数据分析和建模工作提供有力支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值