将文本居中放在带注释的格子图的面板上

时间:2013-08-22 17:15:42

标签: r lattice

我有一个多面板格子图。它具有偶数个等宽列。我希望将文本放在列中。

有时,这很容易做到。例如,xlabmain参数通常可以很好地处理这项工作。但我想要一个更灵活的解决方案。 (我有许多字符串,并希望将它们定位在不同的高度,但总是以列为中心。)

当图形在面板外没有注释时,

grid.text("Label", x = unit(.5, "npc"), y = unit(yPos, "npc"))将起作用。但是当它发生时 - 例如,当我使用scales参数创建行标签时 - 以这种方式使用grid.text()不会使文本居中。这是一个最小的例子:

dataToPlot <- data.frame(x = 1:2, y = 1:2, panel = c('a', 'b'))
plot1 <- xyplot(
  y ~ x | panel, 
  data   = dataToPlot,
  layout = c(2,1),
  ylab   = '',
  xlab   = '',
  scales = list(
    x = NULL, 
    y = list(
      draw   = TRUE,
      labels = c("Label 1", "Label 2"),
      at     = c(1.8, 1.4))))
print(plot1)
grid.text("XXX", x = unit(.5, "npc"))

“XXX”未居中。我该如何居中呢?

我想我可以在没有行标签的情况下绘制图形(即,不提供scales参数),使用grid.text("Label", x = unit(.5, "npc"), y = unit(yPos, "npc")),然后再次使用grid.text()绘制行标签。但是有更简单的解决方案吗?

2 个答案:

答案 0 :(得分:1)

您可以导航视口树并在网格布局中放置一个grob,

plot1
seekViewport("plot_01.toplevel.vp")
grid.text("centred\ntext", gp=gpar(col="red"), 
          vp=viewport(layout.pos.row=9, layout.pos.col=9:13))

enter image description here

答案 1 :(得分:0)

Paul Murrell provides this answer,无论绘图的布局(面板的行数和列数)如何,它似乎都有效:

downViewport("plot_01.figure.vp")
grid.text("centred\ntext")