当前位置:首页>python>用Python做科研级画图——小提琴图

用Python做科研级画图——小提琴图

  • 2026-10-11 08:31:29
用Python做科研级画图——小提琴图

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

在上一篇我们讲了箱线图(Box plot)。它可以告诉我们:中位数在哪里?数据是否离散?是否存在异常值?但箱线图有一个明显的局限,它看不到“分布形状”。

比如,如果两组数据的中位数相同,四分位数相同,IQR 相同,那么箱线图画出来可能几乎一样。

但真实分布可能完全不同:一组是正态分布,一组是双峰分布,一组是偏态分布,箱线图是看不出来的。

这时候,就轮到今天的主角登场了,小提琴图(Violin Plot)。

01. 小提琴图是什么?

小提琴图其实可以理解为 箱线图 + KDE 密度。

结构是这样的:

组成
含义
中间线
中位数
箱体
四分位范围
外形轮廓
KDE 密度

外形像一把小提琴,所以叫 Violin Plot。它能表达统计结构,分布形状。因此在科研中越来越常见。

02. 小提琴图最重要的信息

小提琴图最有价值的地方在于,它可以显示分布形状。

例如:单峰分布:中间最宽,两侧变窄。

双峰分布:会出现两个“鼓包”。

偏态分布:一侧明显拉长。

这些结构,在箱线图里是看不到的。

03. 什么时候用小提琴图?

小提琴图特别适合:

1)比较多个组的分布形状

例如:不同模型误差分布

不同地区污染分布

不同实验组结果

不仅可以比较中心值,还能比较分布结构是否不同。

2)数据量较大

因为 KDE 需要足够样本。

一般建议:n > 50

数据越多,小提琴图越稳定。

3)你关心分布形态

例如:是否多峰?是否偏态?是否集中?

小提琴图比箱线图更有信息量。

04. 小提琴图常见误区

1)宽度代表样本数量

实际上,宽度代表概率密度,而不是数量。

2)形状一定真实

小提琴图依赖 KDE。

如果样本量很小,形状可能不稳定。

3)越复杂越好

小提琴图已经很复杂。

不要再叠加太多信息,否则会难读。

05. 小提琴图 vs 箱线图

图形
能表达什么
箱线图
中位数 + 离散程度
小提琴图
分布形状 + 统计结构

箱线图看统计,小提琴图看形状。

06. 论文级小提琴图 Python 示例

import osimport numpy as npimport matplotlib as mplimport matplotlib.pyplot as pltimport seaborn as snsfrom 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))sns.violinplot(         data=data,         inner="box",         cut=0,         ax=ax)ax.set_xticklabels(labels)ax.set_title("Violin Plot Comparison / 小提琴图比较", fontsize=14)ax.set_ylabel("Accuracy / 准确率", fontsize=12)out_path = os.path.join(OUT_DIR,"violin_plot_demo.jpg")fig.savefig(         out_path,         dpi=300,         bbox_inches="tight",         pad_inches=0.05)plt.close()print("Saved:", out_path)

箱线图告诉你数据在哪里,小提琴图告诉你数据长什么样。

小提琴图已经能展示 KDE 密度、箱线统计。

但如果我们还想看到 每个真实样本点、分布形状和统计结构,就可以进入一个更高级的图形:《雨云图(Raincloud Plot)》。

——期待你的关注——

往期内容:

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

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

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

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

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

最新文章

随机文章