pythonic生物人

AI复现Nature子刊i+j图(中)

使用R语言复现一下Nature aging中以下子图i、j。

来源:s43587-026-01154-7
来源:s43587-026-01154-7

复现效果图

Image

✅子图i和子图j分别展示了雄性和雌性小鼠中,一系列衰老标志基因和疾病相关基因在不同脑区(HIP和FFCC)的表达倍数变化(Relative Expression, RE)。

  • X轴,每个基因的名称,例如,Apoe、Trem2、Lgals3等基因。
  • Y轴,相对于年轻同性的表达比值(RE)。值越高,说明老年组中该基因表达上调越明显。
  • 分组,每种基因下有两组柱/点,分别代表HIP和FFCC。
  • 星号,标记了在老年组中显著高于年轻组(q < 0.05)的基因。

✅复现代码学习

  • 导入R package
library(patchwork)
library(ggplot2)
library(readxl)
  • geom_jitter添加抖动散点,蓝色箭头所指,
# 散点:每个old样本一个点
    geom_jitter(position = jitter_d, size = 1.7, stroke = 0.35, fill = NA) 
Image
  • geom_linerange添加误差线
 geom_linerange(data = s,
                   aes(x = gene, ymin = pmax(0, mean_y - sem_y),
                       ymax = mean_y + sem_y, group = region),
                   inherit.aes = FALSE, position = dodge,
                   colour = "#111111", linewidth = 0.15)
Image
  • geom_crossbar添加均值横线
# 均值横线
    geom_crossbar(data = s,
                  aes(x = gene, y = mean_y, ymin = mean_y,
                      ymax = mean_y, group = region),
                  inherit.aes = FALSE, position = dodge,
                  width = 0.55, linewidth = 0.15, colour = "#111111",
                  middle.linewidth = 0.15) 
Image
  • 添加显著性星号
# 显著性星号
    geom_text(data = q, aes(x = gene, y = y_pos, label = "*", colour = region),
              inherit.aes = FALSE, size = 4.6, vjust = 0.5, show.legend = FALSE)
Image
  • 文字斜体、上标细节设置
# x轴标签走plotmath实现斜体
    scale_x_discrete(
      drop = FALSE,
      labels = function(x) parse(text = unname(gene_labels[x]))) +
    scale_y_continuous(breaks = seq(0, y_max, 5),
                       expand = expansion(mult = c(0, 0.03)))
Image
  • theme主题细节设置
theme_classic(base_family = "sans") +
    theme(
      plot.title = element_text(face = "bold", size = 13, hjust = 0,
                                margin = margin(b = 2)),
      axis.title.y = element_text(size = 9),
      axis.text.y  = element_text(size = 8, colour = "#222222"),
      axis.text.x  = element_text(size = 7.5, colour = "#222222",
                                  angle = 90, vjust = 0.5, hjust = 1,
                                  margin = margin(t = 2, b = 2)),
      axis.line  = element_line(colour = "#222222", linewidth = 0.35),
      axis.ticks = element_line(colour = "#222222", linewidth = 0.3),
      legend.position  = c(0.07, 0.93),
      legend.background = element_blank(),
      legend.key = element_blank(),
      legend.text = element_text(size = 8),
      legend.spacing.y = unit(0, "pt"),
      plot.margin = margin(5, 5, 0, 5)
    )

AI复现子图abcdefgh代码👉:AI搞定Nature子刊主图「a~h 8张图」
Image