【问题标题】:Subscript in axis label when a line break is included?包含换行符时轴标签中的下标?
【发布时间】:2014-08-19 01:56:24
【问题描述】:

我在这个圈子里转了一圈。

我想要的是轴标签在[下标中的'2peak']下方带有“(V0sub(2peak))”的“相对耗氧量差异”。我已经尝试了替换、bquote 和许多不同的组合与表达式和粘贴/粘贴0,每当我在那里有链接中断时,它似乎在下标“2peak”之前添加了一个很大的差距。

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

使用 paste 而不是 paste0 会绕过大的间隙,但第二行是右对齐的。

谢谢

【问题讨论】:

  • “数学模式”不能正确识别控制字符,例如\n(来自?plotmath)。我假设labs(x="", y=expression("Difference in relative oxygen consumption"~(V0[2][peak]))) 还不够漂亮?
  • 是的,它与我生成的其他图表更加一致,长标题看起来不错,标题都在下面一行等。

标签: r


【解决方案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 和“峰值”不清楚。一个小故障是保留了“in”这个词,这就是为什么需要引用它。解析器无法识别具有初始数字的标记,这就是“2peak”需要引用的原因。

【讨论】:

  • 谢谢,atop() 是我在下兔子洞的路上还没有遇到的。我确实发现了“in”问题,并且从过去的工作中感觉到领先的数字会导致问题。我暂时将其保持打开状态,因为这仍然是一个不受欢迎的解决方案,因为通过将其强制为“顶部/底部”公式会丢失行距的相对性。希望有另一种解决方案。
【解决方案2】:

我认为@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)

【讨论】:

  • 谢谢,我对这种方法持乐观态度,但无法让宽度倍数 "* 5" 起作用。
  • 实际上,在我发布并忘记之前,我正在尝试测试它。我也无法让它工作。由于某种原因,它似乎根本没有调用widthDetails.doubleytitle 函数。我可能需要大量的挖掘才能弄清楚这一点。如果可以,如果需要几天,请告诉我。否则我可能不会打扰。
  • 是的,没关系。我的意思是,目前我不相信有解决方案的指南,所以最好有它。
猜你喜欢
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 2012-10-25
相关资源
最近更新 更多