大家好,我是你们的小帅学长。
如果说直方图和 KDE 是在回答“数据长什么样?”
那么今天的主角箱线图(Box plot)回答的是另一个问题“数据的统计结构是什么?”
很多论文里都会出现箱线图,比如,模型误差分布、不同实验组比较、多组数据稳定性、多区域指标差异。
但我发现一个非常普遍的现象,很多人会画箱线图,却看不懂箱线图。
所以这一篇,我们来讲清楚箱线图到底在表达什么?
01. 箱线图到底在表达什么?
一张标准的箱线图包含五个统计量:
这就是著名的 五数概括法(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做科研级画图——折线图基础模板