我不能用逗号分隔两个注释标签

I cannot separate two annotate labels with a comma

首先,我是初学者 R 用户。我想在我的图表中添加 R 方和 p 值。但是,在一行中只用逗号分隔。附件是我正在尝试使用的代码。

ggplot(data, aes(x,y))+
geom_point(shape=1,size=4)+
stat_smooth(method="lm",size=0.6,se=FALSE,colour="black")+
annotate("text",x=30,y=0.45,label=c("italic(r^{2}==0.151)","p==0.226"),parse=TRUE)+
theme_bw(base_size = 12)

但是,我收到此错误:

Error: Aesthetics must be either length 1 or the same as the data (1): label

谢谢!

这有效,但它不会给你一个逗号,因为逗号会混淆公式解析器。

library(ggplot2)
set.seed(123)
n <- 100
data <- data.frame(x=(40+10*rnorm(n)),y=-0.2+0.5*rnorm(n))
ggplot(data)+
  geom_point( aes(x,y),shape=1,size=4)+
  stat_smooth(method="lm",size=0.6,se=FALSE,colour="black")+
  annotate("text",x=c(30,37),y=c(0.45,0.43),label=c("italic(r^{2}==0.151)","p==0.226"),
                                                                           parse=TRUE) +
  theme_bw(base_size = 12)

这是图表。

请注意,您的错误出现是因为您在 annotate 命令中给它一个长度为 2 的向量,但 xy 参数的长度仅为 1。我调整了它们,但我认为它会更好。

要获得逗号,您可以将其分成两个 annotate 层,例如 thi:

library(ggplot2)
set.seed(123)
n <- 100
data <- data.frame(x=(40+10*rnorm(n)),y=-0.2+0.5*rnorm(n))
ggplot(data)+
  geom_point( aes(x,y),shape=1,size=4)+
  stat_smooth(method="lm",size=0.6,se=FALSE,colour="black")+
  annotate("text",x=30,y=0.45,label="italic(r^{2}==0.151)", parse=T) +
  annotate("text",x=36,y=0.43,label=", p==0.226",parse=F) +
  theme_bw(base_size = 12)

产生这个:

不过个人觉得太麻烦了。不用逗号。尽管可能有一种方法可以通过转义序列或其他方式在公式中获取它。

当您想将多个表达式解析为单个表达式时,可以使用 paste 将这些表达式放在一行中。正如另一个答案中所解释的那样,现在您给出了 annotate 两个不同的表达式,但只有一组 x、y 坐标,这导致了错误。

没有逗号,单个表达式可能看起来像

paste("italic(r^{2}) ==", 0.151, "~p==.226")

这就是您要在 annotate 中放置的标签。附加波浪号在第一个和第二个表达式之间形成 space。

要包含逗号,您需要在 plotmath 中 list。在 plotmath 中,list 表示逗号分隔列表(请参阅 ?plotmath 了解所有可用功能)。从本质上讲,这意味着将整个表达式包装在 listpaste.

paste("list(italic(r^{2}) ==", 0.151, ", p==.226)")

因此您的注释代码将是

+ annotate("text", x=30, y=0.45, label=paste("list(italic(r^{2}) ==", 0.151, ", p==.226)"), parse=TRUE)

除了 aosmith 的解决方案外,只需尝试以下解决方案:

library(ggplot2)
set.seed(123)
n <- 100
data <- data.frame(x=(40+10*rnorm(n)),y=-0.2+0.5*rnorm(n))
ggplot(data, aes(x,y))+
  geom_point(shape=1,size=4)+
  stat_smooth(method="lm",size=0.6,se=FALSE,colour="black") +
  annotate(geom = "text",
           x = 30, y = 0.45,
           parse = TRUE,
           label = "italic(r)^{2}==0.151*','~italic(p)==0.226")

enter image description here