【问题标题】:Why does ggplot annotate throw this warning: In is.na(x) : is.na() applied to non-(list or vector) of type 'expression'为什么 ggplot annotate 会抛出此警告:在 is.na(x) 中:is.na() 应用于“表达式”类型的非(列表或向量)
【发布时间】:2020-07-26 00:47:20
【问题描述】:

我想用一个简单的方程注释一个 ggplot 图。下面的代码会执行此操作,但会引发有关应用 is.na() 的警告:

library(ggplot2)
ggplot() +
  annotate(geom = "text", x = 1, y = 1, 
           label = expression(paste(beta, pi, "(1-" , pi, ")")),
           hjust = "left")
Warning message:
In is.na(x) : is.na() applied to non-(list or vector) of type 'expression'

在没有警告的情况下包含表达式的正确语法是什么?

为什么这不会使警告消失?

suppressWarnings(
  ggplot() +
    annotate(geom = "text", x = 1, y = 1, 
             label = expression(paste(beta, pi, "(1-" , pi, ")")),
             hjust = "left")
)

我正在使用 R 版本 4.0.2 和 ggplot2 版本 3.3.2

【问题讨论】:

    标签: r ggplot2 annotate


    【解决方案1】:

    annotate() function does not support expressions。你需要传入一个字符串并设置parse=TRUE。你可以这样做

      annotate(geom = "text", x = 1, y = 1, 
               label = 'paste(beta, pi, "(1-" , pi, ")")', parse=TRUE,
               hjust = "left")
    

    【讨论】:

    • 链接的线程很有趣,但它已经有 5 年历史了,当时它似乎已经失败了。 OP 的代码确实会产生一个很好解析的表达式,但只是带有警告。因此,我不太确定“注释不支持表达式”是否属实。
    【解决方案2】:

    在没有警告的情况下运行代码的方法是将表达式作为列表传递并设置parse = TRUE

    library(ggplot2)
    ggplot() +
      annotate(geom = "text", x = 1, y = 1, 
               label = list('paste(beta, pi, "(1-" , pi, ")")'),
               hjust = "left", parse = TRUE)
    

    reprex package (v0.3.0) 于 2021-02-01 创建

    警告是通过尝试对表达式计算 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
    

    在 ggplot2 中,这种检查发生在 ggplot2:::is_complete(expression(1 + 2)) 中,在 ggplot2:::detect_missing 中调用。我通过设置options(warn = 2) 发现了这一点,然后使用traceback() 引导我使用这些功能。

    【讨论】:

    • 谢谢。这就是我一直在寻找的隐藏功能:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多