我在R中有一个使用ggplot的图,它显示了基于距离的冗余分析的结果。
冗余分析的代码如下:
#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进行着色:
### 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
发布于 2021-09-06 15:12:24
我假设您的数据框如下所示
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的标签参数:
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)。
https://stackoverflow.com/questions/69076207
复制相似问题