Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 是否可以添加一个图例框,其中包含以geom_文本书写的文本?_R_Ggplot2 - Fatal编程技术网

R 是否可以添加一个图例框,其中包含以geom_文本书写的文本?

R 是否可以添加一个图例框,其中包含以geom_文本书写的文本?,r,ggplot2,R,Ggplot2,我想用多个变量在R中绘制一个NMDS。我已经在geom_point中使用了大小、形状和颜色。但我有另一个变量,所以我把它作为数值包含在geom_文本中,问题是我需要在另一个图例中显示每个数字。是否可以在不改变尺寸、形状和颜色的情况下进行 这是我试过的 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","a

我想用多个变量在R中绘制一个NMDS。我已经在geom_point中使用了大小、形状和颜色。但我有另一个变量,所以我把它作为数值包含在geom_文本中,问题是我需要在另一个图例中显示每个数字。是否可以在不改变尺寸、形状和颜色的情况下进行

这是我试过的

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))

data1下面是一个获取文本图例的黑客程序。首先,对代码进行一些更改:

  • 数据帧名称不应在
    aes
    中重述。应该只使用裸列名
  • 我在
    data2
    中创建了一个
    hab.num
    列,而不是使用单独的数字向量。使用单独的向量是危险的,因为它破坏了列从给定数据帧到各种绘图美学的映射。它可能在特定情况下“起作用”,但它很脆弱并且容易出错
  • data.frame
    函数自动将字符列转换为因子(除非添加参数
    stringsAsFactors=FALSE
    ),因此在调用ggplot时无需将这些列转换为因子
好的,回到手头的问题:我们将把
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()

为什么不写物种文本而不是数字代码?因为真实数据有许多文本字符,即使我使用
check\u overlap=TRUE
许多点也没有我想要的标签这很聪明-我喜欢它。一个稍微不同的路径是到Habitat ala的刻面
facet\u wrap(~Habitat,nrow=1)
谢谢!是的,刻面可能会使情节更容易理解。当前美学映射的组合令人困惑(至少对我来说)。