我想用多个变量在R中绘制一个NMDS。我已经在geom_point中使用了尺寸、形状和颜色。但是我有另一个变量,所以我把它作为数值包含在geom_text中,问题是我需要在另一个图例中显示每个数字是什么。在不改变大小、形状和颜色传说的情况下,能做到这一点吗?
这是我尝试过的
data1<-data.frame("Replicas" = c(1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3),
"Part" = c("leg","leg","leg","arm","arm","arm","leg","leg","leg","arm","arm","arm","leg","leg","leg","arm","arm","arm","leg","leg","leg","arm","arm","arm"),
"Species" = c("Spc1","Spc1","Spc1","Spc1","Spc1","Spc1","Spc2","Spc2","Spc2","Spc2","Spc2","Spc2","Spc3","Spc3","Spc3","Spc3","Spc3","Spc3","Spc4","Spc4","Spc4","Spc4","Spc4","Spc4"),
"Habitat" = c("Cali","Cali","Cali","Cali","Cali","Cali","Delhi","Delhi","Delhi","Delhi","Delhi","Delhi","Fiji","Fiji","Fiji","Fiji","Fiji","Fiji","Fiji","Fiji","Fiji","Fiji","Fiji","Fiji"),
"NMDS1" = c(-0.556,-0.001,-0.074,-0.352,-0.019,0.111,-0.235,-0.663,-0.34,-0.39,-0.41,-0.669,0.176,0.038,-0.038,0.158,-0.177,-0.19,0.462,0.496,0.348,0.472,0.502,0.42), "NMDS2" = c(-0.085,0.035,0.134,-0.124,0.055,0.064,0.22,-0.133,0.061,0.285,-0.082,-0.425,0.686,0.587,0.494,0.46,0.29,0.309,0.183,0.16,-0.242,0.1,-0.067,-0.339)
)
data2 <- as.integer(as.factor(data1$Habitat)) #To assign numerical values to each factor included in Habitat
ggplot(data1, aes(NMDS1, NMDS2)) +
geom_point(aes(colour=factor(data1$Part), size=factor(data1$Replicas), shape=factor(data1$Species))) +
geom_text(aes(x=NMDS1,y=NMDS2,label=data2))

我想在图例框中包括“生境”,显示一个是卡利,两个是德里,三个是斐济。拜托有人能帮我吗?
发布于 2019-10-11 19:21:00
下面是一个获取文本图例的黑客。首先,对代码进行一些更改:
aes中被重声明。data2中创建了一个hab.num列,而不是有一个单独的带有数字的向量。使用单独的向量是危险的,因为它破坏了从给定数据帧到各种情节美学的列映射。data.frame函数会自动将字符列转换为因子(除非添加参数stringsAsFactors=FALSE),因此不需要将这些列转换为对ggket.的调用。
好的,回到眼前的问题:我们将hab.num映射到fill美学,因为我们没有将fill用于其他任何东西。这将创造一个传奇。然后,我们将图例标签设置为所需的值,并去掉填充图例中的点标记,因为我们只需要文本标签。
library(tidyverse)
data1 = data1 %>%
mutate(hab.num = factor(recode(Habitat, Cali=1, Delhi=2, Fiji=3)))
ggplot(data1, aes(NMDS1, NMDS2)) +
geom_point(aes(colour=Part, size=factor(Replicas), shape=Species, fill=hab.num)) +
geom_text(aes(x=NMDS1,y=NMDS2,label=hab.num)) +
scale_fill_discrete(labels=paste(levels(data1$hab.num), "=", levels(data1$Habitat))) +
guides(fill=guide_legend(keywidth=unit(0,"mm"), override.aes=list(size=0, colour=NA))) +
labs(size="Replicas", fill="Habitat") +
theme_classic()

https://stackoverflow.com/questions/58346811
复制相似问题