首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新标记R双图中的dbRDA因子标签

重新标记R双图中的dbRDA因子标签
EN

Stack Overflow用户
提问于 2021-09-06 14:29:52
回答 1查看 95关注 0票数 0

我在R中有一个使用ggplot的图,它显示了基于距离的冗余分析的结果。

冗余分析的代码如下:

代码语言:javascript
复制
#Create environment file of subsetted variables
env <- as.data.frame(cbind(metadata$ph, metadata$lat, metadata$long, metadata$slope, metadata$aspect, metadata$elevationcm, metadata$peatdepth, metadata$calluna, metadata$moss, metadata$sphag, metadata$sedge, metadata$grass, metadata$bare, metadata$doc, metadata$n, metadata$suva, metadata$hazen, metadata$moisturem, metadata$e4e6, metadata$dnamgg, metadata$abbymoisture, metadata$bdgcm3))
colnames(env)<-c("ph", "lat","long","slope","aspect","elevationcm","peatdepth", "calluna","moss","sphag","sedge","grass","bare","doc","n","suva","hazen","moisturem","e4e6","dnamgg","abbymoisture","bdgcm3")
# use the following on sites that dont have molinea
env <- as.data.frame(cbind(metadata$lat, metadata$long, metadata$slope, metadata$aspect, metadata$elevationcm, metadata$peatdepth, metadata$calluna, metadata$moss, metadata$sphag, metadata$sedge, metadata$bare, metadata$doc, metadata$n, metadata$suva, metadata$hazen, metadata$moisturem, metadata$e4e6, metadata$dnamgg, metadata$abbymoisture, metadata$bdgcm3, metadata$lightmolm2, metadata$rainfallmm, metadata$tair, metadata$tsoil, metadata$lightcol, metadata$rainfallcol, metadata$taircol, metadata$tsoilcol))
colnames(env)<-c("lat","long","slope","aspect","elevationcm","peatdepth","calluna","moss","sphag","sedge","bare","doc","n","suva","hazen","moisturem","e4e6","dnamgg","abbymoisture","bdgcm3", "lightmolm2", "rainfallmm", "tair", "tsoil", "lightcol", "rainfallcol","taircol", "tsoilcol")
#F
dbRDA1<-capscale(dist ~ lat+long+slope+aspect+elevationcm+peatdepth+ph+calluna+moss+sphag+grass+sedge+bare+doc+n+suva+hazen+moisturem+e4e6+bdgcm3, data=env, na.action = "na.omit")
summary(dbRDA1)
#Test the overall model
test1<-anova(dbRDA1, perm = 9999)## SIGNIFICANT
test1
#Test which variables are significant
test2<-anova(dbRDA1, by="terms", permu=9999)
test2
#Test which axes are significant
test3<-anova(dbRDA1, by="axis", permu=9999)
test3
plot(dbRDA1)

如您所见,其中的变量具有特定的名称。下面的代码使用ggplot提取重要变量,将它们绘制到dbRDA上,然后使用名为“manage”的因子对RDA进行着色:

代码语言:javascript
复制
### Plot a dbRDA
metadata2<-na.omit(metadata) #remove row with missing variable
smry <- summary(dbRDA1)
df1  <- data.frame(smry$sites[,1:4])       # PC1 and PC2
df1$location<-metadata2$manage
df1 <- df1[order(df1$manage),] 
find_hull <- function(df1) df1[chull(df1$CAP1, df1$CAP2), ]
library(plyr)
hulls <- ddply(df1, "manage", find_hull)
cent<-aggregate(cbind(df1$CAP1,df1$CAP2) ~ manage, data = df1, FUN = mean)
segs<-merge(df1, setNames(cent, c('manage', 'V1','V2')), 
            by = 'manage', sort = TRUE)
df1$seg1<-segs$V1
df1$seg2<-segs$V2
df2  <- data.frame(smry$biplot[,1:2])     # loadings for PC1 and PC2
#subset df2 with only significant variables
test2<-na.omit(test2)
df2$p<-as.numeric(test2$`Pr(>F)`)
df2<-subset(df2, p < 0.05)
#Plot with sig variables and no ellipses / hulls etc
rda.plot <- ggplot(df1, aes(x=CAP1, y=CAP2, color = metadata2$manage)) + 
  geom_point(size=3) +
  scale_color_manual(values=c("red", "green", "orange","yellow", "blue", "pink",
                           "#AD6F3B", "purple"), name="Management/Condition",
                    breaks=c("F", "M", "U", "MH", "10Y", "5R", "D", "I"),
                    labels=c("Rotationally Burnt (Grouse Moor)","Mown (Grouse Moor)", "Unmanaged (uncut Grouse Moor)", "80y post burn (ex-Grouse Moor)",
                              "10y post restoration", "5y post restoration", "Degraded",  "Intact")) +
  geom_hline(yintercept=0, linetype="dotted") +
  geom_vline(xintercept=0, linetype="dotted") +
  theme_classic()

rda.biplot <- rda.plot +
  geom_segment(data=df2, aes(x=0, xend=CAP1, y=0, yend=CAP2), 
               color="black", arrow=arrow(length=unit(0.01,"npc"))) +
  geom_text(data=df2, 
            aes(x=CAP1,y=CAP2,label=rownames(df2),
                hjust=0.5*(1-sign(CAP1)),vjust=0.5*(1-sign(CAP2))), 
            color="black", size=4.5)
rda.biplot 

这将生成一个如下所示的图形:dbRDA plot

但是,您将看到变量的名称与原始数据中的名称相同,这是我不能更改的(需要为更改后的变量名称编辑大量其他脚本)。相反,我宁愿在绘图中重命名这些标签,但我想不出一种方法,因为geom.text从df2中获取标签-而我添加到geom-text中的部分似乎不起作用。

有谁知道如何更改图表上的文本标签,例如,从"sedge“更改为"Sedge abundance”TIA

EN

回答 1

Stack Overflow用户

发布于 2021-09-06 15:12:24

我假设您的数据框如下所示

代码语言:javascript
复制
df2 <- data.frame(CAP1 = c(0.5,0.3,0.2), CAP2 = c(0.2,0.3,0.5))
rownames(df2) <- c("sedge", "Soil.Moisture", "air.temp")

当您不想直接更改标签的行名时,应该可以创建一个长度与包含您想要的名称的df2行数相同的向量,并将其转发给geom_text的标签参数:

代码语言:javascript
复制
vec <- c("Sedge Abundance", "Soil Moisture", "air temperature")

rda.biplot <- rda.plot +
              geom_segment(data=df2, aes(x=0, xend=CAP1, y=0, yend=CAP2), 
                           color="black",
                           arrow=arrow(length=unit(0.01,"npc"))) +
              geom_text(data=df2, 
                        aes(x=CAP1,y=CAP2,label=vec,
                            hjust=0.5*(1-sign(CAP1)),
                            vjust=0.5*(1-sign(CAP2))), 
                        color="black", size=4.5)

一般来说,提供一个简短的可重复的示例可以帮助您获得问题的正确答案,例如,在这里了解df2是什么样子会有所帮助(例如,请参阅here)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69076207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档