上一篇我们学了直方图,用来展示数据的分布区间;今天我们学习它的“平滑版”——核密度图(KDE图),更适合展示数据的分布趋势。
核密度图用连续的曲线代替直方图的柱子,能更直观地看出数据的集中区域和分布形状,比如“小费金额主要集中在2-5元”“成绩分布是否呈正态分布”,同时颜值更高、更简洁,适合科研汇报、高级数据分析✨
Seaborn绘制核密度图的核心函数是sns.kdeplot(),支持填充颜色、分组对比、双变量展示等功能,我们用小费数据集演示,新手直接复制运行。
展示“小费金额”的分布趋势,用填充颜色让图表更直观,3行核心代码搞定:
import seaborn as snsimport matplotlib.pyplot as plt# 1. 加载数据+设置主题tips = sns.load_dataset("tips")sns.set_style("whitegrid", rc={"font.sans-serif": ["SimHei"]})# 2. 绘制基础核密度图:x轴=小费金额,填充曲线下方sns.kdeplot(x="tip", data=tips, color="#95E1D3", fill=True)# 3. 优化图表:标题、坐标轴标签plt.title("小费金额分布核密度图")plt.xlabel("小费金额(元)")plt.ylabel("密度(分布概率)")# 显示图表plt.show()

核密度图最常用的场景是“分组对比”,比如对比不同用餐时间、不同性别的数据分布差异;同时还能绘制双变量核密度图,展示两个变量的联合分布,信息量拉满:
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.set_style("whitegrid", rc={"font.sans-serif": ["SimHei"]})# 1. 按用餐时间分组,对比不同用餐时间的小费分布趋势sns.kdeplot(x="tip", hue="time", data=tips,fill=True, # 填充曲线下方palette="Set1", # 分组配色alpha=0.7 # 填充透明度,避免重叠)plt.title("不同用餐时间小费金额分布核密度图")plt.xlabel("小费金额(元)")plt.ylabel("密度")plt.show()# 2. 双变量核密度图:展示账单金额和小费金额的联合分布# 颜色越深,代表该区域的数据越多sns.kdeplot(x="total_bill", y="tip", data=tips,cmap="Blues", # 颜色映射(从浅蓝到深蓝)fill=True)plt.title("账单金额与小费金额联合分布核密度图")plt.xlabel("账单金额(元)")plt.ylabel("小费金额(元)")plt.show()


填充颜色太刺眼?用alpha参数调整透明度(0-1之间),建议设置为0.6-0.8,既清晰又柔和;
分组太多?控制分组数量(不超过5个),避免曲线重叠、颜色杂乱;
双变量核密度图颜色不好看?用cmap参数自定义颜色映射,比如cmap="Greens"(绿色系)、cmap="RdBu_r"(红蓝色系);
不需要填充?去掉fill=True即可,默认只显示曲线。
将核密度图与箱线图结合,同时展示数据的分布趋势和离散程度,让统计可视化更全面:
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.set_style("whitegrid", rc={"font.sans-serif": ["SimHei"]})# 创建1行2列的子图,左右布局fig, axes = plt.subplots(1, 2, figsize=(12, 5))# 左子图:核密度图(小费金额分布趋势)sns.kdeplot(x="tip", data=tips, color="#95E1D3", fill=True, ax=axes[0])axes[0].set_title("小费金额分布核密度图")axes[0].set_xlabel("小费金额(元)")axes[0].set_ylabel("密度")# 右子图:箱线图(小费金额离散程度)sns.boxplot(x="tip", data=tips, color="#F38BA8", ax=axes[1])axes[1].set_title("小费金额箱线图")axes[1].set_xlabel("小费金额(元)")# 调整子图间距plt.tight_layout()plt.show()

本篇我们掌握了Seaborn核密度图的基础绘制、分组对比和双变量展示,学会了用更平滑、更专业的方式展示数据分布趋势~
下篇我们将学习Seaborn的“颜值担当”——热力图,教你一键展示多变量之间的相关性(比如“各科成绩的相关性”),做出高级感满满的统计图表,记得关注!
往期回顾:
Python学习笔记——从入门到报废(十九、第三方库(下))
(文章使用AI进行润色和排版)