当前位置:首页>python>Python可视化Seaborn全攻略 | Part.6

Python可视化Seaborn全攻略 | Part.6

  • 2026-10-12 02:45:21
Python可视化Seaborn全攻略 | Part.6

第六篇:Seaborn统计篇|直方图详解,看数据分布超直观🧮

前面我们学了散点图(展示变量关系)、线图(展示变化趋势),今天我们学习统计类图表的“入门款”——直方图。

在数据分析中,我们经常需要查看数据的分布情况:比如“学生成绩集中在哪个分数段”“账单金额主要分布在哪个区间”“用户年龄分布是否均匀”,而直方图就是最直观的工具。

用Seaborn绘制直方图,不仅颜值高,还能一键添加核密度曲线、分组对比,新手也能轻松搞定统计分布可视化👇

📊 核心函数:sns.histplot() 直方图绘制

Seaborn绘制直方图的核心函数是sns.histplot(),核心作用是将数据分成多个“区间(bins)”,用柱子的高度表示每个区间的数据数量,能快速看出数据的集中范围。

✅ 基础直方图(直接复制运行)

用小费数据集,展示“账单金额”的分布情况,看大多数账单集中在哪个金额区间,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.histplot(x="total_bill", data=tips, color="#4ECDC4")# 3. 优化图表:标题、坐标轴标签plt.title("账单金额分布直方图")plt.xlabel("账单金额(元)")plt.ylabel("数据数量(人数)")# 显示图表plt.show()

✅ 进阶直方图:分组+核密度曲线,信息量拉满

实际分析中,我们常常需要对比不同类别的数据分布(比如“不同性别的账单金额分布差异”),同时添加核密度曲线,更清晰地看出数据分布趋势,这些用Seaborn都能一键实现:

import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.set_style("whitegrid", rc={"font.sans-serif": ["SimHei"]})# 1. 按性别分组,对比不同性别的账单金额分布,添加核密度曲线sns.histplot(    x="total_bill", hue="sex", data=tips,    kde=True,  # kde=True  添加核密度曲线    palette="Set2",  # 分组配色    edgecolor="black"  # 柱子边框颜色(更清晰))plt.title("不同性别账单金额分布直方图(带核密度曲线)")plt.xlabel("账单金额(元)")plt.ylabel("数据数量(人数)")plt.show()# 2. 自定义区间数量(bins),更精准展示分布# bins越大,区间越多,细节越清晰;反之则越简洁sns.histplot(    x="total_bill", data=tips,    bins=20,  # 自定义20个区间    color="#FF6B6B",    edgecolor="black")plt.title("账单金额分布直方图(自定义20个区间)")plt.xlabel("账单金额(元)")plt.ylabel("数据数量(人数)")plt.show()

💡 避坑小技巧

  • bins参数怎么设?不宜过大或过小:过大会导致图表杂乱(区间太多),过小会丢失分布细节(区间太少),建议根据数据量设置为10-30之间;

  • 分组后柱子重叠?用multiple="dodge"参数,让分组柱子并排显示,比如sns.histplot(x="total_bill", hue="sex", data=tips, multiple="dodge");

  • 不需要核密度曲线?去掉kde=True即可,默认不显示;

  • 柱子颜色太单调?用color参数自定义单颜色,或用palette参数自定义分组配色。

✅ 实战拓展:直方图与散点图结合

将直方图与散点图结合,同时展示数据分布和变量关系,让可视化更全面:

import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.set_style("whitegrid", rc={"font.sans-serif": ["SimHei"]})# 创建2行1列的子图,上下布局fig, axes = plt.subplots(2, 1, figsize=(10, 8))# 上子图:直方图(账单金额分布)sns.histplot(x="total_bill", data=tips, color="#4ECDC4", ax=axes[0])axes[0].set_title("账单金额分布直方图")axes[0].set_xlabel("账单金额(元)")axes[0].set_ylabel("数据数量(人数)")# 下子图:散点图(账单金额与小费金额关系)sns.scatterplot(x="total_bill", y="tip", data=tips, color="#FF6B6B", ax=axes[1])axes[1].set_title("账单金额与小费金额关系散点图")axes[1].set_xlabel("账单金额(元)")axes[1].set_ylabel("小费金额(元)")# 调整子图间距,避免拥挤plt.tight_layout()plt.show()

📌 第六篇小结+下篇预告

本篇我们掌握了Seaborn直方图的基础绘制、分组对比、核密度曲线添加,能轻松应对“查看数据分布”的统计需求~

下篇我们将讲解直方图的“平滑版”——核密度图,教你更直观地展示数据分布趋势,对比多个类别的分布差异,提升统计可视化的专业性!


往期回顾:

Python学习笔记——从入门到报废(二十、文件(上))

Python可视化Seaborn全攻略 | Part.5

Python可视化Seaborn全攻略 | Part.4

Python学习笔记——从入门到报废(十九、第三方库(下))

(文章使用AI进行润色和排版)

最新文章

随机文章