大数跨境
0
0

nature同款配对箱线图|附详细代码与注解,一次性搞懂 p 值标注

nature同款配对箱线图|附详细代码与注解,一次性搞懂 p 值标注 R语言数据分析指南
2025-11-06
1

欢迎关注R语言数据分析指南

本节来介绍Nature一篇新论文中的一组配对连线箱线图,作者提供了对应的代码,但是经测试无法达到输出原图的效果。小编根据论文所提供的source data数据结合其代码进行了删减修改使其更加的简洁更具有阅读性,力争还原图表。 更多详细内容请查看论文内介绍。

论文信息

Multi-omic profiling reveals age-related immune dynamics in healthy adults

Gong, Q., Sharma, M., Glass, M.C. et al. Multi-omic profiling reveals age-related immune dynamics in healthy adults. Nature (2025). https://doi.org/10.1038/s41586-025-09686-5

原图

仿图

论文代码

https://github.com/aifimmunology/IHA-Figure

代码展示

library(tidyverse)
library(readxl)
library(legendry)
library(ggpubr)
library(rstatix)
library(ggtext)

数据读取

此数据集是根据图表结合其对应的source data数据进行整合而成,非原始数据集。此部分内容主要根据个人对图形的熟悉度来推测所需数据结构,结合source data数据集中的两份数据进行了联接合并。

dff <- read_tsv("data.tsv") %>% 
  mutate(`Response_Group-Flu B/Phuket HA`=factor(
    `Response_Group-Flu B/Phuket HA`,
    levels = c("low responder","middle responder","high responder")))
# 定义因子保证顺序一致
dff$Group <- factor(dff$Group,levels =unique(dff$Group))
dff$group2 <- factor(dff$group2,levels =unique(dff$group2))

统计分析

对于如何添加p值有很多的方法,但是小编比较喜欢用下方所示代码的方式。此段代码除了统计分析并可自定义位置信息,这样在一些特定化的场景下有很广泛的应用性。同时建议结合图来添加信息,做的相互配备。

pval <- dff %>% filter(Group %in% c("Young_Day_0","Young_Day_7",
         "Older_Day_0","Older_Day_7")) %>%
  group_by(`Response_Group-Flu B/Phuket HA`,`Age.Group`) %>%
  mutate(Age.Group = factor(Age.Group, levels = c("Young""Older"))) %>% 
  select(`Adjusted_HAI.Mean_Perc_Inhib`,Group) %>%  # 选择所需数据
  rstatix::wilcox_test(`Adjusted_HAI.Mean_Perc_Inhib` ~ Group,paired = TRUE) %>% 
  # 自定义设置x,y顺序
  mutate(xmin=c(1,4,7,10,13,16),xmax=c(2,5,8,11,14,17),y.position=90)

数据可视化

在论文所提供的原始代码中作者是通过分面的形式来显示的,但是这种是没有添加分组条带的效果。因此小编还是使用了legendry包来实现这一操作,并且设置了双层的嵌套注释,这样保证了X轴文本与原图的一致性。简单来说就是将原有的X轴文本隐藏,使用第一层的分组文本来替换原有的X轴文本。

ggplot(dff,aes(x = interaction(Group,group2,`Response_Group-Flu B/Phuket HA`),
  y = Adjusted_HAI.Mean_Perc_Inhib,fill = `Age.Group`)) +
  geom_boxplot(outlier.shape = NA, lwd = 0.3) +
  geom_point(color = "black", size = 1, stroke = 0) +
  scale_fill_manual(values = c(Older="#bf812d",Young="#35978f")) +
  scale_y_continuous(expand = expansion(mult = c(0.10.15))) +
  labs(x=NULL,y="Per cent inhibition",
       title = "Flu-specific HAI by response group (2020-2021 BYam)") +
    # 添加统计信息
  stat_pvalue_manual(pval, label = "p",size = 4, bracket.size = 0.5,
                     inherit.aes = FALSE) +
# 多层嵌套注释
  guides(x = legendry::guide_axis_nested(
    type="bracket",key = key_range_auto(sep = "\\."),
    levels_text = list(element_blank(), # x轴文本
      element_markdown(angle=0,color="black"), # 内层分组文本
      # 最外层分组文本属性
      element_text(angle=0,color="black",size=11,face="bold"))
    )) +
  theme_classic() +
  theme(legend.position = "none"
        legend.title = element_blank(), 
        axis.text.y=element_text(color="black"),
        axis.line = element_line(colour = "black"),
        plot.title = element_text(vjust=0.5,hjust=0.5,color="black")) +
# 添加连接线
  geom_line(aes(group = interaction(`Age.Group`, subjectGuid)),
            color = "black", linewidth = 0.1, linetype = 4)  

关注下方公众号下回更新不迷路

本节介绍到此结束,有需要深入学习R数据可视化的读者欢迎点击下方所示文档,购买后会邀请对应交流群并分享数据。

1.内容更新截止2025年/12月/31日结束,后期无任何更新。
2.只分享案例内容,无答疑,交流群只供读者互相交流,不一定有人回答问题。
3.内容只包含R语言绘图内容,无任何生信分析全套代码,有过高期望者不要买。
4.有充足时间者可以考虑继续等待,2026年会正式出版R语言绘图相关的书籍

若上述几点都可以接受,欢迎付费购买此文档。购买后会联系小编会及时邀请进交流群,群内分享资料。通过在线腾讯文档分析案例清单,内附案例下载链接,案例代码文件夹支持下载到本地查看。

R绘图进阶实战|ggplot2数百经典案例

专业化交流群

即将满员,错过又是漫长的等待。

在线目录大纲

通过腾讯文档在线编辑,小编可实时进行bug注解,只要保证R软件及R包版本号与案例所示一致,无须担心代码运行报错问题。在线文档内附有案例代码下载链接

html注释文档

从2025年起的除极个别案例外,其余案例图提供下方所示html注释文档非常方便查看

2025年案例图展示

【声明】内容源于网络
0
0
R语言数据分析指南
R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
内容 1180
粉丝 0
R语言数据分析指南 R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
总阅读565
粉丝0
内容1.2k