【问题标题】:Combining `expression()` with `\n`将 `expression()` 与 `\n` 组合
【发布时间】:2012-10-23 06:51:15
【问题描述】:

我有一个 ggplot,我在标签文本中使用了expression(phantom(x) >=80) 以获得正确的大于或等于符号。

但是我还需要在下面紧接 (N=...):

require(ggplot2)
.d <- data.frame(a = letters[1:6], y = 1:6)

labs <- c("0-9\n(N=10)","10-29\n(N=10)","30-49\n(N=10)", +
   "50-64\n(N=10)","65-79\n(N=10)", expression(phantom(x) >=80))

ggplot(.d, aes(x=a,y=y)) + geom_point() + 
   scale_x_discrete(labels = labs)

如何将expression() 与转义\n 结合起来?

【问题讨论】:

    标签: r ggplot2 plotmath


    【解决方案1】:

    正如@otsaw 在他的answer to your earlier question 中所说,plotmath(因此expression)不允许换行。
    但是,作为 hack,您可以使用atop≥80 出现在(N=10) 之上。但是您很快就会发现它与其他标签不匹配:

    labs <- c("0-9\n(N=10)","10-29\n(N=10)","30-49\n(N=10)", 
              "50-64\n(N=10)","65-79\n(N=10)", 
              expression(atop(phantom(x) >=80, (N==10))))
    

    因此,作为进一步的技巧,您可以将其他标签作为表达式传递:

    labs <- c(expression(atop(0-9,(N==10))),expression(atop(10-29,(N==10))),
              expression(atop(30-49,(N==10))), expression(atop(50-64,(N==10))),
              expression(atop(65-79,(N==10))), expression(atop(phantom(x) >=80, (N==10))))
    

    但当然你有@otsaw 解决方案(使用 Unicode),它的罗嗦要少得多:

    labs <- c("0-9\n(N=10)","10-29\n(N=10)","30-49\n(N=10)", 
              "50-64\n(N=10)","65-79\n(N=10)", 
              "\u2265 80\n(N=10)")
    

    【讨论】:

    • +1 用于 unicode 字符,甚至不知道这是可能的。
    【解决方案2】:

    另一种方法是使用最近存档的tikzDevice。这会将绘图创建为tikz,这是乳胶友好格式。

    这将允许您将任何乳胶表达式作为字符串传递给您的标签。

    它还有一个额外的好处是,您可以编译具有与整个文档相同的序言的文档,以便字体等保持一致。

    所有这些都可以使用knitropts_chunk$set(dev = 'tikz') 自动完成

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多