我有一个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
合并?
答案 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))))
因此,作为进一步的黑客攻击,您可以将其他标签作为表达式传递:
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 :(得分:1)
另一种方法是使用最近存档的tikzDevice
。这会将图形创建为tikz
,这是乳胶友好格式。
这将允许您将任何乳胶表达式作为字符串传递给您的标签。
它的另一个好处是,您可以使用与整个文档相同的序言编译文档,以便字体等一致。
所有这些都可以使用opts_chunk$set(dev = 'tikz')