its*_*ami 4 r annotate ggplot2
我想用一个简单的方程注释一个 ggplot 图。下面的代码做了它,但它会抛出一个关于应用 is.na() 的警告:
library(ggplot2)
ggplot() +
annotate(geom = "text", x = 1, y = 1,
label = expression(paste(beta, pi, "(1-" , pi, ")")),
hjust = "left")
Run Code Online (Sandbox Code Playgroud)
Warning message:
In is.na(x) : is.na() applied to non-(list or vector) of type 'expression'
Run Code Online (Sandbox Code Playgroud)
在没有警告的情况下包含表达式的正确语法是什么?
为什么这不会使警告消失?
suppressWarnings(
ggplot() +
annotate(geom = "text", x = 1, y = 1,
label = expression(paste(beta, pi, "(1-" , pi, ")")),
hjust = "left")
)
Run Code Online (Sandbox Code Playgroud)
我正在使用 R 版本 4.0.2 和 ggplot2 版本 3.3.2
在没有警告的情况下运行代码的方法是将表达式作为列表传递并设置parse = TRUE。
library(ggplot2)
ggplot() +
annotate(geom = "text", x = 1, y = 1,
label = list('paste(beta, pi, "(1-" , pi, ")")'),
hjust = "left", parse = TRUE)
Run Code Online (Sandbox Code Playgroud)

由reprex 包于 2021 年 2 月 1 日创建(v0.3.0)
该警告是通过尝试对is.na()表达式求值而生成的。
is.na(expression(1 + 2))
#> Warning in is.na(expression(1 + 2)): is.na() applied to non-(list or vector) of
#> type 'expression'
#> [1] FALSE
Run Code Online (Sandbox Code Playgroud)
在 ggplot2 中,这种检查发生在 中ggplot2:::is_complete(expression(1 + 2)),称为 in ggplot2:::detect_missing。options(warn = 2)我通过设置然后使用traceback()引导我找到这些功能来发现这一点。
该注释()函数不支持表达式。您需要传入一个字符串并设置parse=TRUE. 你可以做
annotate(geom = "text", x = 1, y = 1,
label = 'paste(beta, pi, "(1-" , pi, ")")', parse=TRUE,
hjust = "left")
Run Code Online (Sandbox Code Playgroud)