包含换行符时轴标签中的下标?

时间:2014-08-19 01:56:25

标签: r

我已经围成一圈。

我想要的是轴标签上写着“相对耗氧量的差异”,“(下面的'2peak')下面的”(V0sub(2peak))“。我已经尝试了替换,bquote和一些不同的表达式和paste / paste0的组合,每当我有链接断点时,它似乎在下标“2peak”之前添加了一个大的间隙。

qplot(1:10)+
labs(x="", y=expression(paste0("Difference in relative oxygen consumption\n",(V0[2][peak]))))

使用粘贴而不是粘贴0将会产生很大的差距,但第二行是正确对齐的。

由于

2 个答案:

答案 0 :(得分:1)

通常不需要

paste,甚至会混淆事情。如果您阅读?plotmath页面,则表明您无法使用\n获取换行符。可以使用atop plotmath函数:

    qplot(1:10)+ labs(x="", y=expression(atop(
            Difference~'in'~relative~oxygen~consumption,
            "("*V0[`2peak`]*")")) )

你的意图w.r.t. O \ sub2和"峰值"不清楚。一个小故障是"在"是保留的,这就是为什么需要引用它。解析器无法识别具有初始数字的令牌,这就是“#2; 2peak'需要引用。

答案 1 :(得分:0)

我认为@BondedDust的建议是最好的,但我也调整了a solution for a different question也可以工作。在这里,我们做了一些相当低级别的grob hacking。

#helper function
library(grid)
doubleYTitle <- function(a,b) {
    gTree(children=gList(
        textGrob(a, gp=gpar(fontsize=13, fontface=2), y=.5, x=0, 
            vp=viewport(layout.pos.row=1, layout.pos.col=1), rot=90),
        textGrob(b, gp=gpar(fontsize=12, fontface=1), y=.5, x=0,
            vp=viewport(layout.pos.row=1, layout.pos.col=2), rot=90)
    ), vp=viewport(layout=grid.layout(nrow=1, ncol=2)), cl="doubleytitle")
}

widthDetails.doubleytitle <- function(x, recording=T) {
    Reduce(`+`, lapply(x$children, grid:::widthDetails.text)) * 5
}

现在我们将其用于

gg <- qplot(1:10)+labs(x="", y="Difference")
gb <- ggplot_build(gg)
gt <- ggplot_gtable(gb)
xx <- doubleYTitle("Difference in relative oxygen consumption",
    expression((V0[2][peak])))
gt$grobs[[7]]<-xx
plot(gt)

enter image description here