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

4

2 回答 2

14

正如@otsaw 在他对您之前的问题的回答中所说plotmath(因此expression)不允许换行。
但是,作为 hack,您可以使用atoplet≥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)")

在此处输入图像描述

于 2012-11-02T15:57:18.210 回答
1

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

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

它还有一个额外的好处,即您可以使用与整个文档相同的序言来编译文档,从而使字体等保持一致。

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

于 2012-11-05T00:06:53.340 回答