sns.histplot()
—— Seaborn 直方图绘制
seaborn.histplot()
是 seaborn
提供的直方图绘制函数,基于 matplotlib
进行封装,相比 plt.hist()
更美观,并提供更丰富的功能,如 KDE 曲线、自动调整 bin 宽度、统计标准化 等。
1. 语法
import seaborn as sns
sns.histplot(data, bins=10, kde=False, stat="count", color=None, element="bars", multiple="layer")
2. 参数说明
参数 | 说明 |
---|---|
data | 需要绘制直方图的数据(列表、数组、Series) |
bins | 直方图的分组数(默认自动选择) |
kde | 是否绘制核密度估计(KDE)曲线 |
stat | 直方图的统计方式:count (计数)、density (概率密度)、percent (百分比) |
color | 直方图颜色 |
element | bars (柱状)、step (阶梯状)、poly (多边形填充) |
multiple | layer (分层)、stack (堆叠)、fill (归一化堆叠) |
3. 基本用法
3.1 简单直方图
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
# 生成正态分布数据
data = np.random.randn(1000)
# 绘制直方图
sns.histplot(data, bins=30, color="blue", alpha=0.7)
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.title("Histogram Example")
plt.show()
📌 说明
bins=30
:将数据分成 30 组。color="blue"
:设置直方图颜色。alpha=0.7
:透明度。
3.2 直方图 + KDE 曲线
可以使用 kde=True
在直方图上添加 核密度估计(KDE)曲线,用于更平滑地显示数据分布。
sns.histplot(data, bins=30, kde=True, color="purple")
plt.show()
3.3 归一化直方图
使用 stat="density"
显示概率密度,使直方图的面积总和为 1
,适用于概率分布分析。
sns.histplot(data, bins=30, kde=True, stat="density", color="green")
plt.show()
stat
可选值:
"count"
:默认,显示计数(每个柱子的频率)。"density"
:每个柱子的面积总和为 1。"percent"
:显示百分比。
4. 多组数据对比
4.1 叠加直方图
如果有多个数据集,可以使用 hue
参数进行分类显示。
import pandas as pd
# 生成两组数据
data1 = np.random.randn(1000)
data2 = np.random.randn(1000) + 2 # 让数据偏移
# 创建 DataFrame
df = pd.DataFrame({"value": np.concatenate([data1, data2]),
"category": ["Group 1"] * 1000 + ["Group 2"] * 1000})
# 叠加直方图
sns.histplot(df, x="value", hue="category", bins=30, kde=True, element="step")
plt.show()
📌 说明
hue="category"
:按类别显示不同颜色。element="step"
:使用阶梯状直方图,更清晰。kde=True
:添加密度曲线。
4.2 堆叠直方图
使用 multiple="stack"
进行堆叠。
sns.histplot(df, x="value", hue="category", bins=30, multiple="stack")
plt.show()
multiple
可选值:
"layer"
:默认,重叠显示。"stack"
:堆叠。"fill"
:归一化堆叠(各柱子的高度总和为 1)。
5. sns.histplot()
vs plt.hist()
功能 | sns.histplot() | plt.hist() |
---|---|---|
默认风格 | 美观,默认带 KDE | 传统 Matplotlib 风格 |
统计方式 | count , density , percent | density=True/False |
多数据支持 | hue 分类,multiple 叠加 | 需要手动绘制 |
透明度控制 | alpha | alpha |
推荐使用 | ✅ 数据分析,数据分类可视化 | ✅ 基础绘图 |
6. 总结
sns.histplot()
是plt.hist()
的高级版本,默认更美观。bins
控制柱子数量,kde=True
添加密度曲线。stat
可选择"count"
,"density"
,"percent"
进行不同统计方式。hue
可用于分组数据,multiple
设定柱子叠加方式。- 推荐用于 数据分析、机器学习、统计建模 场景。