"同样是展示数据分布,为什么大佬的图能一眼看出玄机?"
"箱线图+密度曲线的完美CP,解锁数据可视化新姿势!"
今天手把手教你用R语言绘制小提琴图,让你的数据会说话👇
01
小提琴图:数据界的「变形金刚」
🔍 什么是小提琴图?
它是「箱线图」和「核密度图」的私生子——
-
左右宽度:显示数据分布密度(越宽密度越高)
-
中间凹槽:标记中位数位置
-
外围须线:标记四分位数范围
💡 为什么必须学?
1️⃣ 单图抵三图:同时展示分布形态、集中趋势、离群值
2️⃣ 组间对比神器:横向对比不同类别数据差异(如基因表达差异)
3️⃣ 异常值捕手:自动标出数据中的"离群刺客"
02
实操演示:3分钟画出专业级小提琴图
# 代码来源:https://www.r2omics.cn/
# 加载R包,没有安装请先安装 install.packages("包名")
library(tidyverse)
# 读取箱线图数据文件
df = read.delim("https://www.r2omics.cn/res/demodata/boxplot.txt",# 将此处换成你自己电脑里的文件
header = T # 指定第一行是列名
)
# 把数据转换成ggplot常用的类型(长数据)
df = df %>%
pivot_longer(-1,names_to = "Sample",values_to = "Value")
# 绘图
p = ggplot(df,aes(x=Sample,y=Value,fill=Sample))+
# stat_boxplot(geom = "errorbar", # 添加误差线
# width=0.3)+
geom_violin(alpha = 1, # 透明度
trim = T, # 是否修剪尾巴,即将数据控制到真实的数据范围内
scale = "count", # 如果“area”(默认),所有小提琴都有相同的面积(在修剪尾巴之前)。如果是“count”,区域与观测的数量成比例。如果是“width”,所有的小提琴都有相同的最大宽度。
)+
theme_bw()+ # 主题
theme(
axis.text.x = element_text(angle = 90,
vjust = 0.5
) # x轴刻度改为倾斜90度,防止名称重叠
)
p
🎨 美化技巧
-
颜色搭配:用
scale_fill_brewer(palette = "Set2")
调用配色方案 -
标签注释:用
annotate("text", x=..., y=..., label="***")
手动添加星号 -
动态效果:保存为交互式SVG格式(
ggsave("plot.svg", width=8, height=6)
)
03
实战案例:基因表达差异分析
场景:比较不同组织中某基因的表达水平
数据:模拟的3组样本(组织A/B/C)的基因表达量
解读:
-
组织B的小提琴图最宽→数据分布最集中
-
组织C右尾长→存在极端高表达样本
-
箱线图中位线位置→组织A表达量最低
04
避坑指南:这些坑你别踩!
小提琴图不是炫技工具,而是数据故事的放大器!