|||
R语言使用ggplot2对冗余分析(RDA)等约束排序分析结果作图
冗余分析(RDA)等约束排序分析常常被用来分析群落物种数据,并找到哪些环境因子对物种数据有所影响。之前用R进行RDA分析,但是结果往往是用sigmplot展示作图,最近用R语言作图有好多小问题需要克服,记录一下。关于RDA分析,也看了好多别人的资料,不再做记录,这里推荐刘尧科学网博客http://blog.sciencenet.cn/blog-3406804-1182489.html,里面也有很多其他的分析,都很详细,看了好几遍,但是必须自己做一遍,才能把握整个过程。
这里只记录作图代码以备以后用。数据简单说明(仅举例),共4个氮素水平,对照(CK),N2(每年每平方米加氮2g),N10(10g),N50(50g), 每个处理6个重复,共24个样点。环境因子共有9个(图1蓝色箭头),微生物群落结构是7个数据(图1红色箭头),PLFA实验数据。
文件rdatu1: RDA分析后环境因子坐标 biplot
文件rdatu2: 微生物群落结构坐标 species
文件rdatu: 24个样方点坐标 sites 数据格式如下,这些坐标可以直接用代码获取,这里留存进行二次分析。
要解决的小问题?
1. 分组绘制颜色: 如图3,即不同处理的样方点分组显示不同颜色,环境因子和微生物结构分组显示。我在文章上经常见到图一和二类似的图。原本环境因子和微生物因子坐标是一个文本,作图时遇到问题,总想改动代码一次性把图画好,发现一直运行不了,就把数据分成两部分,把画线部分重新写了一遍,试一试,发现真可以。
2. 文字显示: 文字老是重叠或遮挡如图1,以前在sigmplot可以手动调,但是箭头画的不好,这里加载ggrepel包,画图时把geom_text 改为geom_text_repel(即代码绿色部分)即可。ggrepel包和ggplot2语句几乎是通用的。
3. 微生物群落和环境因子数据坐标数据差异太大。有时候作图发现,箭头很长或很短,很不美观,也不能清晰的展示内容。这时候可以把微生物群落数据新坐标(一般是物种数据太大,在外围;环境因子数据太小,聚在中间)同比例缩小,但切记是同比例,且必须所有的微生物坐标都要缩小。这种做法是允许的,也不会影响群落结构与环境因子的关系。
以下是作图的代码,只需要改动红色部分就可以,这些作图的小技巧同样适用于其他约束排序和非约束排序分析。
library(ggrepel) ##这个包能最大可能使图中文字显示,减少文字重叠。
library (ggplot2)
rdatu<-read.table("clipboard",header=T) ##解释因子新坐标
rdatu1<-read.table("clipboard",header=T) ## 微生物因子新坐标 这三个坐标也可以用R代码获得见以上链接,这里主要是需要保存一下RDA分析结果
rdatu2<-read.table("clipboard",header=T) ##样方新坐标,示例24个数据,4个处理,每种处理6个重复
P1<- ggplot(rdatu, aes(RDA1, RDA2)) + # 换成rdatu2,后两行#去掉运行就得图三,这里只做图1和2;
#geom_point(aes(color =Treatment)) + # 绘制点图
#scale_color_manual(values = c('red', 'orange', 'green3',"blue")) + #按照处理绘制点颜色
theme(panel.grid = element_blank(),
panel.background = element_rect(color = 'black', fill = 'transparent'),
legend.title = element_blank(), legend.key = element_rect(fill = 'transparent')) +
labs(x = 'RDA1 (37.75%)', y = 'RDA2 (6.52%)') +
geom_vline(xintercept = 0, color = 'gray', size = 0.5) +
geom_hline(yintercept = 0, color = 'gray', size = 0.5) +
geom_segment(data = rdatu, aes(x = 0,y = 0, xend = RDA1,yend = RDA2), arrow = arrow(length = unit(0.1, 'cm')), size = 0.3, color = "blue") +
geom_text_repel(data = rdatu, aes(RDA1 * 1.1, RDA2 * 1.1, label = group), color = "blue", size = 3) +
geom_segment(data = rdatu1, aes(x = 0,y = 0, xend = RDA1,yend = RDA2), arrow = arrow(length = unit(0.1, 'cm')), size = 0.3, color = "red") +
geom_text_repel(data = rdatu1, aes(RDA1 * 1.1, RDA2 * 1.1, label = group), color = "red", size = 3)
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-1 09:24
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社