欢迎关注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.1, 0.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语言绘图相关的书籍
❝若上述几点都可以接受,欢迎付费购买此文档。购买后会联系小编会及时邀请进交流群,群内分享资料。通过在线腾讯文档分析案例清单,内附案例下载链接,案例代码文件夹支持下载到本地查看。
专业化交流群
即将满员,错过又是漫长的等待。
在线目录大纲
❝通过腾讯文档在线编辑,小编可实时进行bug注解,只要保证R软件及R包版本号与案例所示一致,无须担心代码运行报错问题。在线文档内附有案例代码下载链接
html注释文档
从2025年起的除极个别案例外,其余案例图提供下方所示html注释文档非常方便查看
2025年案例图展示




























