欢迎关注R语言数据分析指南
❝本节来分享解读一下nature communications上一篇文章的数据可视化案例图,论文中图表的数据+代码作者均有提供,可从文章中直接下载,数据及代码整理的非常整洁明了,实际测试均可成功运行,对此感兴趣的读者可以去原文中详细查看。本次先来介绍论文中的Figure_1,个人观点仅供参考,更多详细内容请参考论文介绍。
论文
The biogeography of soil microbiome potential growth rates
https://www.nature.com/articles/s41467-024-53753-w
论文原图展示
❝文章中主图只有三张都是使用频率非常高的图,但是作者提供的代码中有非常多的学习点。认真学习此份案例将能真实提高R语言绘图的能力。
代码获取处
文章内点击Supplementary Code 1与Supplementary Data 1即可下载对应的数据及代码,代码为txt格式,只需将其后缀改为R即可。
方差分析
此段代码主要学习如何进行方差ANOVA分析并通过agricolae包进行Duncan多重比较检验
library(readxl)
library(ggplot2)
library(ggpubr)
growth <- data.frame(read_excel("41467_2024_53753_MOESM4_ESM.xlsx")) # 从Excel文件中读取数据并创建data.frame
summary(aov(log(RelGrowth)~Ecosystem,data=growth)) # 对log(RelGrowth)与Ecosystem的关系进行方差分析并总结结果
unique(growth$Ecosystem) # 显示Ecosystem变量中的唯一值(不同的生态系统类型)
fit = aov(log(RelGrowth)~Ecosystem,data=growth) # 再次进行方差分析并将结果存储在fit中
library(agricolae) # 加载agricolae包,用于多重比较检验
res <- duncan.test(fit,"Ecosystem") # 进行Duncan检验,比较不同Ecosystem的差异显著性
plotdata=data.frame(res$groups) # 将Duncan检验结果中的分组信息转为data.frame
plotdata$Ecosystem = row.names(plotdata) # 将行名(Ecosystem名称)添加为plotdata的Ecosystem列
p1=ggplot()+
geom_jitter(data=growth,aes(x=Ecosystem,y=log(RelGrowth),color=Ecosystem0),width=0.1,size=0.7)+ # 使用geom_jitter绘制散点图,设定X轴为Ecosystem,Y轴为log(RelGrowth),颜色根据Ecosystem0变量设置
geom_boxplot(data=growth,aes(x=Ecosystem,y=log(RelGrowth),color=Ecosystem0),alpha=0.5,size=0.3, outlier.shape = NA)+ # 使用geom_boxplot绘制箱线图,不显示离群值
scale_color_manual(values=c("Grassland"="darksalmon","Forest"="green4"))+ # 手动设置颜色:草地为深橙色,森林为绿色
geom_text(data=plotdata,aes(x=Ecosystem,y=1.8,label=groups),size=2)+ # 使用geom_text将Duncan分组信息显示在图中,Y轴位置为1.8
scale_x_discrete(limits=c("Desert grassland","Temperate grassland", "Alpine grassland","Tropical forest","Subtropical forest", "Temperate forest","Boreal forest","Alpine forest"))+ # 设置X轴的显示顺序
labs(x="Ecosystems",y= expression("ln-"*G[mass]*" (mg "*g^-1*" MBC"*~h^-1*")"))+ # 设置X轴和Y轴的标签,Y轴使用表达式
theme_test()+
theme(plot.margin = unit(c(1,1,1,1), "pt"), # 设置图表的边距
legend.position = c(0.7,0.15), # 设置图例的位置
legend.title = element_blank(), # 不显示图例标题
legend.text = element_text(size=7), # 设置图例文字的大小
legend.key.size = unit(0.3,"cm"), # 设置图例标识的大小
legend.background = element_blank(), # 不显示图例背景
axis.text = element_text(size=7), # 设置坐标轴文字的大小
axis.text.x = element_text(size=7,angle = 60,hjust = 1), # 设置X轴文字的大小和角度
axis.title = element_text(size=8), # 设置坐标轴标题的大小
title = element_text(size=11)) # 设置标题的大小
线性回归
此段代码主要需要学习如何使用expression来添加特殊文本
library(colorspace) # 加载colorspace包
summary(lm(log(RelGrowth)~log(AI),data=growth)) # 使用线性回归模型拟合log(RelGrowth)和log(AI)之间的关系
p2 = ggplot()+
geom_point(data=growth,aes(x=AI,y=log(RelGrowth)),size=2.5,stroke=0.3,shape=21,fill="firebrick3")+ # 使用geom_point绘制散点图,X轴为AI,Y轴为log(RelGrowth),填充颜色为firebrick3
geom_smooth(data=growth,aes(x=AI,y=log(RelGrowth)),method="lm",formula = "y~log(x)", color="firebrick3",se=F,size=0.5)+ # 使用geom_smooth绘制回归线,方法为lm(线性回归),公式为y~log(x),颜色为firebrick3,不显示置信区间
labs(x=expression("Aridity index"), y=expression("ln-"*G[mass]*" (mg "*g^-1*" MBC"*~h^-1*")"))+ # 设置X轴和Y轴的标签,Y轴使用表达式
theme_test()+ # 使用theme_test主题
theme(plot.margin = unit(c(1,1,1,1), "pt"), # 设置图表的边距
legend.position = "non", # 不显示图例
legend.title = element_text(size=7), # 设置图例标题的字体大小
legend.text = element_text(size=6), # 设置图例文字的字体大小
legend.key.size = unit(0.2,"cm"), # 设置图例标识的大小
legend.background = element_blank(), # 不显示图例背景
axis.text = element_text(color = "black",size=8), # 设置坐标轴文字的颜色和大小
axis.text.x = element_text(size=8), # 设置X轴文字的大小
axis.title = element_text(size=9), # 设置坐标轴标题的大小
title = element_text(size=11))+ # 设置标题的字体大小
annotate("text",x=60,y=-0.8,label = expression(italic(R)^2*"=0.53, "*italic(P)*"<0.001"),size=2) # 使用annotate函数在指定位置添加文本注释,显示R平方和P值,字体大小为2
summary(lm(log(RelGrowth)~MAT,data=growth[which(growth$Ecosystem0=="Grassland"),]))
summary(lm(log(RelGrowth)~MAT,data=growth[which(growth$Ecosystem0=="Forest"),]))
p3 = ggplot()+
geom_point(data=growth,aes(x=MAT,y=log(RelGrowth),color=Ecosystem0,group=Ecosystem0),
size=2.5,stroke=0.5,fill="grey")+
geom_smooth(data=growth,aes(x=MAT,y=log(RelGrowth),color=Ecosystem0,group=Ecosystem0),
method="lm",se=F,size=0.5)+
scale_color_manual(values=c("Grassland"="darksalmon","Forest"="green4"),
labels=c("Grassland"=expression("Grassland: "*italic(R)^2*"=0.45, "*italic(P)*"<0.001"),
"Forest"=expression("Forest: "*italic(R)^2*"=0.24, "*italic(P)*"<0.001")))+
labs(x=expression("Mean annual temperature ("*degree*C*")"),
y=expression("ln-"*G[mass]*" (mg "*g^-1*" MBC"*~h^-1*")"))+
theme_test()+
theme(plot.margin = unit(c(1,1,1,1), "pt"),
legend.position = c(0.6,0.9),
legend.title = element_blank(),
legend.text = element_text(size=6,hjust = 0),
legend.key.size = unit(0.2,"cm"),
legend.background = element_blank(),
axis.text = element_text(color = "black",size=8),
axis.text.x = element_text(size=8),
axis.title = element_text(size=9),
title = element_text(size=11))
拼图
p<- ggarrange(p1,p2, p3, ncol = 3, nrow = 1, widths = c(2,3,3),
labels = c("(a)","(b)","(c)"), font.label=list(size=9),hjust = 0, vjust = 1)
p
ggsave("Fig.1.tiff",p,units="cm", width=16, height=8,
dpi=500, compression = "lzw")
ggsave("Fig.1.pdf",p,units="cm", width=16, height=8)