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

R 包含换行符时轴标签中的下标?,r,R,我对这件事绕了一圈 我想要的是axis标签在[下标中的'2peak'下方]用“(V0sub(2peak))”读取“相对耗氧量差异”。我尝试过用expression和paste/paste0替换、bquote和许多不同的组合,每当我在其中出现链接中断时,它似乎会在下标“2peak”之前添加一个很大的间隙 使用“粘贴”而不是“粘贴0”可以避免较大的间隙,但第二行是右对齐的 谢谢粘贴通常是不需要的,甚至会让事情变得混乱。如果阅读?plotmath页面,您会发现无法使用\n获取换行符。可以使用toppl

我对这件事绕了一圈

我想要的是axis标签在[下标中的'2peak'下方]用“(V0sub(2peak))”读取“相对耗氧量差异”。我尝试过用expression和paste/paste0替换、bquote和许多不同的组合,每当我在其中出现链接中断时,它似乎会在下标“2peak”之前添加一个很大的间隙

使用“粘贴”而不是“粘贴0”可以避免较大的间隙,但第二行是右对齐的


谢谢

粘贴
通常是不需要的,甚至会让事情变得混乱。如果阅读?plotmath页面,您会发现无法使用
\n
获取换行符。可以使用
top
plotmath函数:

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

您的意图是w.r.t.O\sub2和“峰值”不清楚。一个小毛病是“in”这个词被保留了,这就是为什么需要引用它的原因。解析器无法识别具有初始数字的令牌,这就是为什么“2peak”需要引用的原因

我认为@BondedDust的建议是最好的,但我也适应了可能的工作。这里我们做一些相当低级的grob黑客

#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
}
#辅助函数
图书馆(网格)

doubleYTitle“数学模式”无法正确识别控制字符,例如
\n
(来自
?plotmath
)。我假设
labs(x=”,y=expression(“相对耗氧量的差异”~(V0[2][peak]))
还不够漂亮?是的,这与我正在生成的其他图表更一致,长标题看起来不错,标题都在下面一行等等。谢谢,top()这是我在下兔子洞的路上还没碰到的一个。我确实抓住了“in”这个问题,从过去的工作中我有一种感觉,领先的数字导致了问题。我将暂时不讨论这个问题,因为这仍然是一个有点不希望的解决方案,因为行距的相对性由于强制将其放入“顶部/底部”公式而丢失。希望还有另一个解决方案。谢谢,我对这种方法很乐观,但无法让宽度倍数“*5”起作用。事实上,在我发布之前,我正试图测试它,但后来忘记了。我也不能让它工作。出于某种原因,它似乎根本没有调用
widthDetails.doubleytle
函数。我可能要花很多时间才能弄明白这一点。如果可以的话,如果需要几天,请告诉我。否则我就不会麻烦了。是的,当然,没关系。我的意思是,目前我不相信有一个解决这个问题的指南,所以最好有它。
#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)