【问题标题】:How to place an expression on top of another expression using plotmath如何使用 plotmath 将表达式放在另一个表达式之上
【发布时间】:2020-03-23 06:19:28
【问题描述】:

如果我想生成一个多行表达式,我可以这样做:

over = 'OVER'
below = 'BELOW'

x_lab_title = bquote(atop(.(over), .(below)))

ggplot(data.frame()) + xlab(x_lab_title)

但是,我想自己制作overbelow 表达式,例如:

over = expression(X^2)
below = expression(Y^2)

但它不起作用 - 而是呈现一个空白区域(为什么会这样?)。在我的场景中,真正的表达式要复杂得多,自动生成,并且在我生成的后续图之间发生变化,因此我不能简单地这样做:

x_lab_title = bquote(X^2, Y^2)

这适用于这种特殊情况,但不适用于 overbelow 的任何其他值。

【问题讨论】:

    标签: r ggplot2 plotmath


    【解决方案1】:

    问题在于 R 中的 expression() 实际上更像是一个表达式容器。您真正想要的是表达式对象中的语言对象。所以你可以这样做

    over = expression(X^2)
    below = expression(Y^2)
    x_lab_title = bquote(atop(.(over[[1]]), .(below[[1]])))
    

    或者,更好的是,跳过expression(),直接使用quote()

    over = quote(X^2)
    below = quote(Y^2)
    x_lab_title = bquote(atop(.(over), .(below)))
    

    【讨论】:

      【解决方案2】:

      经过几个小时的反复试验,找到了解决方案 - 这对我有用:

      atop_string = paste0('bquote(atop(', toString(over), ',', toString(below), '))')
      x_lab_title = eval(parse(text=atop_string))
      

      此解决方案首先组装等效代码表示,然后将其解析为表达式。

      虽然我自己找到了解决方案,但我仍然很好奇为什么不能简单地将表达式嵌入atop

      【讨论】:

        猜你喜欢
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-24
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        相关资源
        最近更新 更多