复现Nature期刊图,换数据即可用!
本次使用R语言复现Nature正刊上的1张图!
R绘制-d图
✅d图是一种SCI中高频率使用的特殊散点图--火山图(Volcano plot),用于快速筛选两组数据之间显著差异的基因/蛋白/代谢物等。那怎么读这张图:
FC:全称Fold Change,代表两组数据某个变量的差异倍数,在上图中表示Astro BioID2和Neuro BioID2两种细胞中不同蛋白质的丰度倍数。实际使用时常用log2Fold Change,log2FC代替FC,原因如下表:
图中每个点:代表两组数据某个变量的差异倍数取log2,例如,上图中,每个点代表一种蛋白在Astro BioID2和Neuro BioID2两种细胞中的丰度相除并取log2,即log2(Astro BioID2/Neuro BioID2 FC) ; P:代表两组数据之间的变量差异是否统计学显著,一般认为P<0.05或者P<0.01为显著(如图中的水平虚线P=0.05,-log10(P)=1,3);有时候也会使用BH或者FDR方法校正的P值; FC阈值:科研中FC常取2、1.5,此时对应的log2FC为1和0.6,典型的火山图还会添加两条FC线,例如一张经典的火山图,
上调(up)变量筛选:火山图通常以 log2FC≥1(即FC ≥ 2),以及P<0.05来筛选上调(up)变量,即下图的绿色点; 下调(down)变量筛选:火山图通常以 log2FC≤ -1(即FC ≤ 0.5)以及P<0.05来筛选下调(down)变量,即下图的紫色点;
后续研究重点关注火山图中这些上调(up)变量和下调(down)变量。
✅读入测试数据
✅关键代码,
# ----------------------------
# 绘图
# ----------------------------
p <- ggplot(volcano_na_data, aes(x = log2FC, y = negLog10P)) +
geom_point(aes(fill = group),
color = "black", shape = 21, stroke = 0.35, size = 5, alpha = 1
) +
scale_fill_manual(values = colors_fill)
# P=0.05 横线与标注
p <- p + geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "black", linewidth = 0.5) +
annotate("text",
x = 7, y = -log10(0.05) + 0.1, label = expression(italic(P) == 0.05),
size = 3.5, vjust = 0
)
p <- p + annotate("text",
x = x_axis_pos + x_label_offset + 0.3, # 调整x坐标,靠近顶点
y = max(volcano_na_data$negLog10P) * 1.05, # 将y坐标设置为最大值,靠近顶部
label = expression(-log[10] ~ "(P)"),
angle = 90,
size = 3.5,
fontface = "bold",
hjust = 1.6,
vjust = 1.7# 调整垂直对齐,确保标签居中在顶点位置
)
✅值得学习的R可视化知识点:
将y轴移动到x=0处,简洁美观,
p <- p + annotate("text",
x = x_axis_pos + x_label_offset + 0.3, # 调整x坐标,靠近顶点
y = max(volcano_na_data$negLog10P) * 1.05, # 将y坐标设置为最大值,靠近顶部
label = expression(-log[10] ~ "(P)"),
angle = 90,
size = 3.5,
fontface = "bold",
hjust = 1.6,
vjust = 1.7# 调整垂直对齐,确保标签居中在顶点位置
)
-log10(P)的写法,expression(-log[10] ~ "(P)") geom_hline添加水平辅助线,
# P=0.05 横线与标注
p <- p + geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "black", linewidth = 0.5) +
annotate("text",
x = 7, y = -log10(0.05) + 0.1, label = expression(italic(P) == 0.05),
size = 3.5, vjust = 0
)
也可以换一个原文中好看的配色,
(加入学习,收费,备注:299)