当前位置:首页>python>用Python做科研级画图——箱线图(解释统计含义)

用Python做科研级画图——箱线图(解释统计含义)

  • 2026-10-11 08:39:30
用Python做科研级画图——箱线图(解释统计含义)

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

如果说直方图和 KDE 是在回答“数据长什么样?”

那么今天的主角箱线图(Box plot)回答的是另一个问题“数据的统计结构是什么?”

很多论文里都会出现箱线图,比如,模型误差分布、不同实验组比较、多组数据稳定性、多区域指标差异。

但我发现一个非常普遍的现象,很多人会画箱线图,却看不懂箱线图。

所以这一篇,我们来讲清楚箱线图到底在表达什么?

01. 箱线图到底在表达什么?

一张标准的箱线图包含五个统计量:

             名称              含义
            最小值
数据的下界(非异常值)
第一四分位数 Q1
25% 数据位置
中位数 Median
50% 数据位置
第三四分位数 Q3
75% 数据位置
最大值
数据上界(非异常值)

这就是著名的 五数概括法(Five-number summary)。

箱线图不是看“频率”,而是看数据的分布位置与离散程度。

02. 箱线图的关键结构

一个箱线图通常包含三部分:

1)箱体(box)

箱体范围:Q1 → Q3

这个区间叫四分位距(IQR),它代表中间50%的数据范围。箱体越高,说明数据越分散。

2)中位线

箱体中间那条线:Median,代表数据中心。

需要注意的是,箱线图用的是中位数,不是均值。这使它对异常值更稳健。

3)“胡须”(whiskers)

胡须并不是:最小值 → 最大值

而是:Q1 − 1.5 × IQR

Q3 + 1.5 × IQR

范围内的最大最小值。

超过这个范围的数据会被标记为:异常值(outliers)。

03. 箱线图最常见的误读

1)胡须是最大最小值

很多人认为,胡须 = 数据范围,实际上不是;

胡须只到 1.5 × IQR,之外的数据会单独画成点。

2)箱体越高说明均值越大

箱体高度代表 数据离散程度,不是均值大小。

3)异常值一定是错误数据

箱线图里的 outlier 只是统计异常,不一定是错误。

例如:极端天气、极端用户行为、极端实验条件,都可能产生异常值。

04. 什么时候该用箱线图?

箱线图特别适合:

1)多组数据对比

例如:不同模型误差、不同区域指标、不同实验处理。

箱线图能同时表达 中位数、离散程度、异常值。

2)数据不服从正态

因为箱线图基于分位数,而不是均值和标准差。所以对偏态数据更稳健。

05. 论文级箱线图 Python 示例

import osimport numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltfrom matplotlib import font_manager as fmwin_fonts = r"C:\Windows\Fonts"for p in [         os.path.join(win_fonts, "times.ttf"),         os.path.join(win_fonts, "timesbd.ttf"),         os.path.join(win_fonts, "timesi.ttf"),         os.path.join(win_fonts, "simsun.ttc"),]:        if os.path.exists(p):                   try:                           fm.fontManager.addfont(p)                   except Exception:                            passmpl.rcParams["font.family"] = ["Times New Roman", "SimSun"]mpl.rcParams["axes.unicode_minus"] = FalseOUT_DIR = r"D:\py_figs"os.makedirs(OUT_DIR, exist_ok=True)# 示例数据np.random.seed(42)model_A = np.random.normal(0.5,0.08,200)model_B = np.random.normal(0.6,0.10,200)model_C = np.random.normal(0.65,0.07,200)data = [model_A, model_B, model_C]labels = [          "Model A / 模型A",          "Model B / 模型B",          "Model C / 模型C"]fig, ax = plt.subplots(figsize=(7,4))box = ax.boxplot(         data,         patch_artist=True,         widths=0.6)ax.set_xticklabels(labels)ax.set_title("Boxplot Comparison / 箱线图比较", fontsize=14)ax.set_ylabel("Accuracy / 准确率", fontsize=12)out_path = os.path.join(OUT_DIR,"boxplot_demo.jpg")fig.savefig(    out_path,    dpi=300,    bbox_inches="tight",    pad_inches=0.05)plt.close()print("Saved:", out_path)

箱线图不是看“多少”,而是看“结构”。它让我们一眼看到了 中位数、离散程度、偏态、异常值,这也是为什么它在论文里如此常见。

箱线图可以表达统计结构和离散程度,但却不能表达分布形状所以很多论文会用另一种图:《小提琴图》。

小提琴图其实是箱线图 + KDE,它不仅能看统计量,还能看到分布形状。下一篇,我会带你搞懂小提琴图。

——期待你的关注——

 往期内容:

用Python做科研级画图——KDE密度

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

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

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

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

最新文章

随机文章