将`expression()`与`\ n`结合起来

时间:2012-11-02 15:21:28

标签: r ggplot2 plotmath

我有一个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)

enter image description here

如何将expression()与转义\n合并?

2 个答案:

答案 0 :(得分:12)

正如@otsaw在answer to your earlier question中所说,plotmath(因此expression)不允许换行。
但是,作为黑客攻击,您可以使用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))))

enter image description here

因此,作为进一步的黑客攻击,您可以将其他标签作为表达式传递:

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))))

enter image description here

但是当然你有@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)")

enter image description here

答案 1 :(得分:1)

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

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

它的另一个好处是,您可以使用与整个文档相同的序言编译文档,以便字体等一致。

所有这些都可以使用opts_chunk$set(dev = 'tikz')

使用knitr自动完成