我需要将三个表达式作为 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.
问题是,对于您的非工作代码,标签不是有效的
?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
)