在ggplot2中使用注释连续多个表达式中的上标星号

问题描述 投票:0回答:1

我需要将三个表达式作为 ggplot2 图表的注释。所有三个表达式一起指的是我的图中的同一点。因此,我想将它们统一在一个表达式中,并在一个图形坐标处使用函数 annotate() 放置。 这三个子表达式中的每一个都包含应位于上标中的星号(三个模型输出的有效系数)。目前,我将paste()命令与parse = TRUE一起使用。如果所有表达式都用像“/”这样的斜杠分隔,那么它就可以工作。 但是,我不希望三个子表达式之间有斜杠。我想在那里有空间。我希望能够更改这些空间的数量。但是,当我从代码中删除斜杠时,它不再起作用。 因此:我怎样才能将所有三个子表达式统一在同一坐标处的一个表达式中,并使所有子表达式中的星号都位于上标中?

# The following code (with slashes) is working fine:

Dummy_df \<- as.data.frame(cbind("Var1" = c(0, 177),
"Var2" = c(0, 177)))

ggplot(Dummy_df, aes(x = Var1, y = Var2)) +
geom_point(size = 0.1, colour = "white") +
theme_light() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(), axis.line = element_blank()) +
xlab(" ") +
ylab(" ") +
annotate("text", label = paste('2.16^"***"', "/", '5.48^"***"', "/", '1.92^"***"'),
x = 40.75, y = 138, parse = TRUE, size = 5)

但是这段代码...

ggplot(Dummy_df, aes(x = Var1, y = Var2)) +
geom_point(size = 0.1, colour = "white") +
theme_light() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(), axis.line = element_blank()) +
xlab(" ") +
ylab(" ") +
annotate("text", label = paste('2.16^"***"', " ", '5.48^"***"', " ", '1.92^"***"'),
x = 40.75, y = 138, parse = TRUE, size = 5)

...还有这段代码

ggplot(Dummy_df, aes(x = Var1, y = Var2)) +
geom_point(size = 0.1, colour = "white") +
theme_light() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(), axis.line = element_blank()) +
xlab(" ") +
ylab(" ") +
annotate("text", label = paste('2.16^"***"', '5.48^"***"', '1.92^"***"'),
x = 40.75, y = 138, parse = TRUE, size = 5)

都抛出以下错误:

Error in `annotate()`:
! Problem while converting geom to grob.
ℹ Error occurred in the 2nd layer.
Caused by error in `parse()`:
! \<text\>:1:14: unexpected numeric constant
1: 2.16^"***"   5.48
^
Run `rlang::last_trace()` to see where the error occurred.
r ggplot2 asterisk annotate superscript
1个回答
0
投票

问题是,对于您的非工作代码,标签不是有效的

?plotmath
表达式,即,如果您想要在单个项目之间留有空格,则必须使用
~
将它们分开,如果没有空格,则需要用一个
*
。在第一个示例中,它的工作方式与您使用
/
一样,这使得您的标签成为有效的数学表达式。

library(ggplot2)

base <- ggplot()

base +
  annotate("text",
    label = paste('2.16^"*"', '5.48^"*"', '1.92^"*"', sep = " / "),
    x = 40.75, y = 150, parse = TRUE, size = 5
  ) +
  annotate("text",
    label = paste('2.16^"***"', '5.48^"***"', '1.92^"***"', sep = "~"),
    x = 40.75, y = 100, parse = TRUE, size = 5
  )  +
  annotate("text",
    label = paste('2.16^"***"', '5.48^"***"', '1.92^"***"', sep = "*"),
    x = 40.75, y = 50, parse = TRUE, size = 5
  )

© www.soinside.com 2019 - 2024. All rights reserved.