将`expression()`与`\n`结合使用

7

我有一个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结合使用?

2个回答

14

正如@otsaw在他您早前问题的答案中所说,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

当然,您还可以使用Unicode来实现@otsaw的解决方案,这样会更加简洁。
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 对于 Unicode 字符,我甚至不知道这是可能的。 - Brandon Bertelsen

1

另一种方法是使用最近归档的tikzDevice。这将创建以tikz格式为友好的latex绘图。

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

它的附加好处是,您可以使用与整个文档相同的导言部分编译文档,以便字体等保持一致。

所有这些都可以使用knitr自动化,使用opts_chunk$set(dev = 'tikz')


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接