当前位置:首页>python>用Python做科研级画图——直方图

用Python做科研级画图——直方图

  • 2026-09-08 16:06:06
用Python做科研级画图——直方图

大家好,我是你们的小帅学长。

很多人会画直方图,但很少有人真的“会”画直方图。

尤其是一个问题:bin 到底怎么选?选少了,图像过度平滑,结构被掩盖。选多了,图像噪声爆炸,看起来像“心电图”。

今天这篇,我们就把直方图讲清楚,不仅告诉你“怎么选”,还给你可以直接用的规则。

01.直方图到底在看什么?

直方图(Histogram)本质是在回答一个问题:数据是怎么分布的?

它关注的是:是否对称?是否偏态?是否多峰?是否存在异常值?数据是否接近正态?

它不是看“平均值”,也不是看“比例”,而是看分布结构。

而决定你能不能看清结构的关键,就是——bin(分箱数)

02.bin 是什么?为什么这么重要?

bin = 把连续变量切成多少段。

举个简单例子:假设你有 1000 个身高数据。

分成 5 个箱子 → 很粗糙

分成 50 个箱子 → 很碎

分成 100 个箱子 → 噪声满屏

所以,bin 决定了你看到的是“趋势”还是“噪声”。

03.bin 选错会发生什么?

情况1:bin 太少

多峰变单峰

偏态看不出来

细节被抹平

你以为数据很稳定,其实它暗流涌动。

情况2:bin 太多

图像变锯齿

噪声被当结构

读者理解成本极高

你以为自己很精细,其实是过拟合视觉。

04.bin 怎么选?给你规则

规则1:Sturges 法则(适合小样本)

公式:k = log₂(n) + 1

n 是样本量;k 是分箱数

适合:n < 200;分布接近正态

优点:简单

缺点:大样本会偏少

规则2:平方根法

k = √n

比如:100 个数据 → 10 个箱;10000 个数据 → 100 个箱

优点:简单好记;实用性强

规则3:Freedman–Diaconis 法

核心思想:用 IQR(四分位距)决定箱宽,而不是主观拍脑袋。

公式:

R:breaks = "FD"

Python seaborn:bins="fd"

优点:对异常值不敏感;大样本稳定;更科学

05.什么时候该手动调整?

即便有规则,也别盲信。

以下情况建议人工观察:

你怀疑数据多峰的时候——建议适当增加 bin,看是否出现结构。

你做展示而非论文的时候——建议可读性优先。

数据极度偏态的时候——建议考虑对数变换再画。

06.直方图模版(不同 bin 规则对比)
import numpy as npimport matplotlib.pyplot as pltimport seaborn as sns# 设置随机种子np.random.seed(42)# 构造一个“略微复杂”的分布(双峰)data = np.concatenate([         np.random.normal(0, 1, 500),         np.random.normal(4, 1.5, 500)])# 样本量n = len(data)# 三种 bin 规则sturges_bins = int(np.log2(n) + 1)sqrt_bins = int(np.sqrt(n))# 创建画布plt.figure(figsize=(15, 4))# 1. Sturgesplt.subplot(1, 3, 1)plt.hist(data, bins=sturges_bins, edgecolor='black')plt.title(f"Sturges Rule\nbins = {sturges_bins}")plt.xlabel("Value")plt.ylabel("Frequency")# 2️.平方根法plt.subplot(1, 3, 2)plt.hist(data, bins=sqrt_bins, edgecolor='black')plt.title(f"Square Root Rule\nbins = {sqrt_bins}")plt.xlabel("Value")# 3️. Freedman-Diaconisplt.subplot(1, 3, 3)plt.hist(data, bins='fd', edgecolor='black')plt.title("Freedman-Diaconis Rule")plt.xlabel("Value")plt.tight_layout()plt.show()

07.常见误区

误区 1:bin 越多越专业

误区 2:软件默认就是最佳

误区 3:所有数据都适合直方图

直方图适合连续变量、样本量足够、想看整体形态;不适合分类变量、极小样本。

直方图不是随便画的,它是分箱规则与数据结构之间的博弈。选 bin,本质是在平滑趋势、保留结构和控制噪声,这就是统计思维。

直方图是“分箱的分布表达”,但如果我们想不依赖箱子、更平滑地表达概率密度、看出更细腻的形态,那就要学习《KDE密度图》。下一篇,我会告诉你:KDE 为什么更“优雅”、带宽怎么选、什么时候 KDE 会误导你。

——期待你的关注——

往期内容:

用Python做科研级画图——哑铃图

用Python做科研级画图——点图替代柱状

用Python做科研级画图——分组对比

用Python做科研级画图——柱状图基础

用Python做科研级画图——折线图基础模板

最新文章

随机文章