sns.violinplot()
—— 小提琴图(Violin Plot)
seaborn.violinplot()
用于可视化数据分布的密度,结合了 箱线图(Box Plot)和 KDE 密度估计,适用于 数据分布分析、对比不同类别的分布情况。
1. 语法
import seaborn as sns
sns.violinplot(data=None, x=None, y=None, hue=None, order=None, split=False, palette=None, orient=None, inner="box")
主要参数
参数 | 作用 |
---|---|
data | DataFrame 数据集 |
x | 分类变量 |
y | 数值变量 |
hue | 按类别分色 |
order | 自定义类别顺序 |
split | True :将 hue 类别合并显示 |
palette | 颜色方案(如 "Blues" 、"pastel" ) |
orient | 'v' 竖向(默认) 或 'h' 横向 |
inner | 'box' (默认)显示箱线图,'point' 显示数据点 |
2. 什么是小提琴图?
小提琴图(Violin Plot)结合了箱线图(Box Plot)和 KDE 密度估计:
- 宽度表示数据密度(比箱线图更直观)。
- 中间的线 是 中位数。
- 默认包含箱线图,可选
inner="point"
仅显示数据点。
3. 基本示例
3.1 画小提琴图
import seaborn as sns
import matplotlib.pyplot as plt
# 加载数据
data = sns.load_dataset("titanic")
# 绘制小提琴图
sns.violinplot(data=data, x="class", y="age")
plt.title("Age Distribution by Class")
plt.show()
📌 说明
x="class"
→ 分类变量(头等舱/二等舱/三等舱)。y="age"
→ 年龄分布密度(比boxplot
更直观)。
3.2 按类别分色(hue
参数)
sns.violinplot(data=data, x="class", y="age", hue="sex")
plt.show()
📌 作用
hue="sex"
→ 不同性别用不同颜色表示。
3.3 合并 hue
类别(split=True
)
sns.violinplot(data=data, x="class", y="age", hue="sex", split=True)
plt.show()
📌 作用
split=True
→ 合并男女数据,使对比更直观。
4. 调整美观
4.1 横向小提琴图(orient="h"
)
sns.violinplot(data=data, x="age", y="class", orient="h")
plt.show()
📌 作用
orient="h"
→ 横向小提琴图(适用于类别较长时)。
4.2 只显示数据点(inner="point"
)
sns.violinplot(data=data, x="class", y="age", inner="point")
plt.show()
📌 作用
inner="point"
→ 显示数据点,而不显示箱线图。
4.3 设置颜色(palette
)
sns.violinplot(data=data, x="class", y="age", hue="sex", palette="pastel")
plt.show()
📌 可选调色板
"pastel"
、"Blues"
、"coolwarm"
、"magma"
。
5. sns.violinplot()
vs sns.boxplot()
sns.violinplot() | sns.boxplot() | |
---|---|---|
作用 | 显示数据分布密度 | 显示中位数、四分位数、异常值 |
适用场景 | 观察数据分布 | 检测异常值 |
是否有密度信息 | ✅ 有 | ❌ 没有 |
sns.boxplot(data=data, x="class", y="age", hue="sex")
plt.show()
6. 总结
✅ sns.violinplot()
适用于数据分布可视化,分析密度。
✅ 常见参数
hue
按类别分色,split=True
合并对比,inner="point"
显示数据点。orient="h"
横向小提琴图,palette="pastel"
调整颜色。