pythonic生物人

复现Nature期刊图,换数据即可用!

本次使用R语言复现Nature正刊上的1张图!


R绘制-d图

s41586-023-05927-7,figures1 d原图
s41586-023-05927-7,figures1 d原图
❤️复现效果图-d图❤️
❤️复现效果图-d图❤️

✅d图是一种SCI中高频率使用的特殊散点图--火山图(Volcano plot),用于快速筛选两组数据之间显著差异的基因/蛋白/代谢物等。那怎么读这张图:

  • FC:全称Fold Change,代表两组数据某个变量的差异倍数,在上图中表示Astro BioID2和Neuro BioID2两种细胞中不同蛋白质的丰度倍数。实际使用时常用log2Fold Change,log2FC代替FC,原因如下表:
Image
  • 图中每个点:代表两组数据某个变量的差异倍数取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线,例如一张经典的火山图,
Image
  • 上调(up)变量筛选:火山图通常以 log2FC≥1(即FC ≥ 2),以及P<0.05来筛选上调(up)变量,即下图的绿色点;
  • 下调(down)变量筛选:火山图通常以 log2FC≤ -1(即FC ≤ 0.5)以及P<0.05来筛选下调(down)变量,即下图的紫色点;
Image

后续研究重点关注火山图中这些上调(up)变量和下调(down)变量。


✅读入测试数据

Image

✅关键代码,

# ----------------------------
# 绘图
# ----------------------------
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# 调整垂直对齐,确保标签居中在顶点位置
)
Image

✅值得学习的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
  )

也可以换一个原文中好看的配色,

ImageImage

测试数据+详细代码将加入👉:《保姆级R可视化教程》,49个章节,20w字+,数百张图,旨在引导如何系统学习R语言可视化,部分展示如下:
图片
图片
图片
图片
图片
图片
复现效果图-abcd图❤️
复现效果图-b图❤️
图片
❤️复现效果图-ABCD图❤️
图片
❤️复现效果图-bcd图❤️
图片
图片
❤️复现效果图-b图❤️
图片
图片
图片
图片
图片
图片
图片
图片
图片
图片

图片

图片
图片

(加入学习,收费,备注:299)

图片