1 前言
最近在帮助大家做数据分析时,我发现一个很一致的现象:越来越多人偏爱小提琴图。大家觉得小提琴图更“现代”、更“高级”,好像比箱线图更像大刊图形。 但其实,很多人并不清楚二者有什么差别。更多时候是“别人用,所以我也用”。
今天的更新,我来尝试把两者的核心区别讲清楚,顺便分享几种常用的小提琴图 R 代码,格式和配色尽量贴近SCI风格,方便你直接放入论文或报告。
2 小提琴图 vs 箱线图的区别
箱线图不展示分布形状。
这句话其实已经概括了最本质的不同。
2.1 箱线图能做什么?
它给你的是“统计摘要”:
-
中位数(median) -
四分位数(Q1–Q3) -
最小 / 最大值 -
离群点
但箱线图不知道数据是什么形状。 它看不出你的数据到底是:
-
单峰 -
双峰 -
长尾 -
偏态 -
有两个亚群
这些结构,箱线图完全表达不了。
2.2 小提琴图能做什么?
小提琴图基于核密度估计(KDE),它展示的是形状:
-
是不是双峰 -
分布尾巴长不长 -
是对称还是偏斜 -
数据密集区在哪里
也就是说,小提琴图专门解决的,就是箱线图看不见的那部分信息。
3 演示代码:三种常用且好看的小提琴图
下面的代码都基于 iris 数据集,你可以直接复制运行。
3.1 基础版小提琴图
特点:简单、干净,用来快速看分布形状。
library(ggplot2)
data(iris)
p1 <- ggplot(iris, aes(x = Species, y = Sepal.Length)) +
geom_violin(fill = "grey80", color = "black", linewidth = 0.5, trim = FALSE) +
theme_classic(base_size = 12) +
labs(title = "Basic violin plot",
x = "",
y = "Sepal length (cm)")
p1
3.2 SCI风格:小提琴 + 箱线图 + 散点
这是目前最推荐的科研绘图方式,信息完整又不花。
nature_cols <- c("#4C72B0", "#55A868", "#C44E52")
p2 <- ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species)) +
geom_violin(color = "black", linewidth = 0.4, trim = FALSE) +
geom_boxplot(width = 0.18, fill = "white",
outlier.shape = NA, color = "black", linewidth = 0.4) +
geom_jitter(width = 0.1, alpha = 0.5, size = 1, color = "black") +
scale_fill_manual(values = nature_cols) +
theme_classic(base_size = 12) +
theme(legend.position = "none",
panel.border = element_rect(color = "black", fill = NA, linewidth = 0.5)) +
labs(title = "Violin + boxplot + points",
x = "", y = "Sepal length (cm)")
p2
4 小结
小提琴图展示的是数据的密度结构,因此在样本量足够时能提供更多细节。但完全可以和箱线图一起绘制,进而更高密度地展示数据结果。本文提供的两种种小提琴图代码,可直接用于论文或者是Poster,欢迎大家结合自己的数据练习!

