python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python绘制统计图表

Python中常用统计图表绘制的实战指南

作者:databook

本文将带你一次搞懂6种最常用的统计图表,分别是直方图、散点图、箱线图、小提琴图、成对关系图和相关性热力图,每种图表都配有Python代码(Seaborn/Matplotlib)和解读技巧,帮你快速发现数据背后的规律与异常

在日常工作和生活中,我们经常会遇到各种各样的数据:每月的外卖账单、每天的步数记录、工作时长与咖啡消耗量……如果只看一堆密密麻麻的数字表格,很容易让人眼花缭乱。

俗话说 “一图胜千言”。

统计图表就像是数据的“显微镜”和“翻译官”,能帮我们快速发现隐藏在数据背后的规律、偏好甚至“异常”。

下面将结合最接地气的生活场景,一次性搞懂 6 种最常用的统计图表!

(使用 Python 的可视化库 Seaborn 和 Matplotlib)

准备工作

在开始前,我们先准备好工具包,并加载一份经典的“餐馆消费与小费(tips)”数据集。(这个数据集是 Seaborn 库自带的,不用额外下载)

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

# 设置画图风格与中文字体支持(根据系统可选)
sns.set_theme(style="whitegrid")
plt.rcParams["font.sans-serif"] = ["SimHei", "Arial Unicode MS"]  # 适配中文
plt.rcParams["axes.unicode_minus"] = False

# 加载内置的餐馆消费数据集
tips = sns.load_dataset("tips")
print(tips.head())

字段说明:total_bill(总账单金额)、tip(小费)、sex(付款人性别)、smoker(是否吸烟)、day(星期几)、time(午餐/晚餐)、size(用餐人数)。

直方图:寻找“大多数人的常态”

在数据分析的日常里,我们总想回答一个朴素的问题:“大多数情况”到底长什么样? 比如,翻开自己的咖啡消费账单,你可能会好奇——每天花在咖啡上的钱,究竟是集中在 15~25 元的平价美式区,还是时不时就跳到 40 元以上的手冲专区?

这种对“主流区间”的追问,正是直方图最擅长的舞台。

直方图的核心使命,就是把单个连续型数值的分布规律,用柱子的高低直观地“画”出来。它不像折线图关心趋势,也不像饼图在意占比,它只做一件事:把你的数据按数值大小切分成连续的“档位”,然后统计每个档位里有多少样本。

于是,哪一档的柱子最高,哪一档就是数据中的“人口稠密区”。

读懂一张直方图,其实并不需要复杂的统计学背景,只要抓住三个视觉线索就够了:

说到底,直方图的价值不在于告诉你最大值或最小值有多惊人,而是帮你找到那个最安心的“常态区间”——它让你知道,自己是否站在大多数人的那一边,同时也提醒你留意那些游离在主流之外的“少数派故事”。

下次再看到一张带平滑曲线的直方图,不妨先找波峰,再看尾巴,数据里的真实人间,就藏在这两者之间。

实战代码

plt.figure(figsize=(8, 5))
# kde=True 会自动绘制核密度估计平滑曲线
sns.histplot(tips["total_bill"], kde=True, color="teal", bins=20)
plt.title("顾客消费账单分布(直方图)", fontsize=14)
plt.xlabel("账单金额 ($)")
plt.ylabel("出现频次 (桌数)")
plt.show()

散点图:探索两件事是否“形影不离”

你有没有好奇过,自己复习的时间越长,考试成绩是不是真的就越好?或者,在餐厅吃饭时,账单金额越高,给的小费是否也水涨船高?这类“一个变量如何随另一个变量变化”的问题,正是散点图最经典的用武之地。

它的核心任务是观察两个数值变量之间是否存在某种关联或规律——是携手同涨同跌,还是各走各路,在二维坐标上一目了然。

读懂散点图,其实是在读懂“点的舞蹈”:

散点图的价值不在精确的数学关系,而在唤醒直觉——它让你先“看见”趋势,再决定是否要进一步做回归分析。

所以,下次当你怀疑两件事存在关联时,先把它们画成散点图吧,答案往往就藏在那些点的舞步里。

实战代码

plt.figure(figsize=(8, 5))
# hue 和 size 映射就餐人数,点的颜色和大小都会随人数变化
sns.scatterplot(
    x="total_bill",
    y="tip",
    data=tips,
    hue="size",
    palette="viridis",
    size="size",
    sizes=(30, 200),
)
plt.title("账单金额与小费金额的关系(散点图)", fontsize=14)
plt.xlabel("总账单 ($)")
plt.ylabel("小费 ($)")
plt.show()

箱线图:抓出“摸鱼”与“内卷”的异常值

对比不同组别的数据时,我们往往不只想看平均值,更想知道“大多数人在哪个范围波动”以及“有没有谁特别离谱”。举个例子,你想对比工作日和周末的睡眠时间——周末通常睡得久(整体水平高),但会不会有个别朋友因为熬夜只睡了 2 小时(极端情况)?

箱线图正是为此而生:它能快速对比不同类别下的数据分布范围、居中水平,并且毫不留情地揪出异常值。

理解箱线图,就像阅读一个数据的“五数概括”故事:

箱线图的魅力在于简洁:一张图就能对比多个类别,把整体分布水平和异常值同时交代清楚。用它来筛查数据中的“异类”,比单纯看表格高效得多。

实战代码

plt.figure(figsize=(8, 5))
sns.boxplot(x="day", y="total_bill", data=tips, palette="Set2")
plt.title("不同星期几的消费水平与波动(箱线图)", fontsize=14)
plt.xlabel("星期")
plt.ylabel("总账单 ($)")
plt.show()

小提琴图:箱线图与密度的“身材秀”

如果说箱线图是数据的“骨架”,那么小提琴图就是给它裹上了一层“肌肉”——它结合了箱线图的信息量与直方图的密度轮廓,让你既能看分布位置,又能看分布的胖瘦形态。

想象一下,午餐时大家更倾向于点均一价的快餐(单峰,图形中段鼓鼓的),而晚餐则有人吃简餐、有人聚餐吃大餐(可能形成两个“鼓包”,即双峰分布)。

这种细腻的形态差异,只有小提琴图才能生动地展现出来。

读懂小提琴图,重点在于“宽度”和“形状”:

总的来说,小提琴图是“探察分布形状”的利器,尤其适合对比多个组别之间的内在结构差异。当你怀疑不同群体可能有不同的分布模式时,不妨试试这把“小提琴”。

实战代码

plt.figure(figsize=(8, 5))
sns.violinplot(x="time", y="total_bill", data=tips, palette="Pastel1")
plt.title("午餐与晚餐消费分布对比(小提琴图)", fontsize=14)
plt.xlabel("用餐时段")
plt.ylabel("总账单 ($)")
plt.show()

成对关系图:数据的“全身全景体检”

如果你手头有一堆数值变量,比如身高、体重、血压、体脂率,你不仅想分别看它们的分布,还想一次性了解两两之间的关联,那么成对关系图就是你的“体检全景报告”。

它把数据集中所有数值变量两两配对,生成一张大矩阵图,让你以全局视角扫描各个维度的联动关系,而不用反复写循环画图。

读这张大图,可以按对角线和非对角线分别来看:

成对关系图的代价是信息量较大,但当你想快速熟悉一份新数据集时,它绝对是最省时省力的“全景扫描仪”。一行代码,全局在握。

实战代码

# 一行代码生成多维全景关系图
sns.pairplot(tips, hue="sex", palette="husl", diag_kind="kde")
plt.show()

相关性热力图:谁和谁是“铁哥们”?

当我们面对一堆数值变量,想知道“谁和谁关系最铁”时,散点图虽然直观,但变量一多就容易眼花缭乱。

这时,相关性热力图就派上了用场——它用色彩的冷暖来量化展示多个变量之间的线性相关系数(范围从 -1 到 1),把复杂的关联关系浓缩成一张色彩矩阵,让你一眼锁定最强(或最弱)的联动关系。

解读热力图,本质是在“读颜色”:

热力图的另一个好处是能在图上直接标注数字(annot=True),让精确的相关系数一目了然。不过要记住,相关系数只衡量线性关系,非线性但很强的关联(比如 U 形曲线)可能显示为弱相关,所以热力图更适合作为探索的第一站,而非定论。

实战代码

plt.figure(figsize=(7, 5))
# 计算数值型字段的相关系数矩阵
corr_matrix = tips.corr(numeric_only=True)

# 绘制热力图并显示数值
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", fmt=".2f", vmin=-1, vmax=1)
plt.title("数值变量之间的相关性矩阵(热力图)", fontsize=14)
plt.show()

总结:我该选用哪种图?

为了方便大家在实际分析时快速选择,下面这张“选图指南”把每种图的核心场景和看点归纳在一起。

你可以根据自己的问题类型,对号入座:

分析目标推荐图表核心价值
看单变量的分布和主流区间直方图 (histplot)找波峰、看偏态、辨群体重心
探寻两个指标的联动趋势散点图 (scatterplot)找正负相关、聚类与特殊模式
对比不同组别的分布与异常点箱线图 (boxplot)查中位数、分位数与抓极端异常值
观察各组内部的详细密度轮廓小提琴图 (violinplot)看分布形状、发现双峰/多峰亚群
多变量全面联动探索成对关系图 (pairplot)全景扫描、一次性看清多维联系
量化多指标之间的关联紧密度相关性热力图 (heatmap)色彩映射相关系数,一目了然

不妨挑选你手头的一份日常数据(比如微信步数、记账流水或打卡记录),挑两张图画一画,探索一下属于你自己的数据故事吧!

到此这篇关于Python中常用统计图表绘制的实战指南的文章就介绍到这了,更多相关Python绘制统计图表内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文