0

我有一个多面板格子图。它有偶数个等宽的列。我想在各列中居中文本。

有时,这很容易做到。例如,xlabandmain参数通常可以很好地处理这项工作。但我想要一个更灵活的解决方案。(我有很多字符串,想将它们放置在不同的高度,但始终位于列的中心。)

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()再次使用来绘制行标签。但是有没有更简单的解决方案?

4

2 回答 2

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))

在此处输入图像描述

于 2013-08-23T12:24:30.940 回答
0

Paul Murrell provides this answer, which seems to work regardless of the layout (in terms of rows and columns of panels) of the plot:

downViewport("plot_01.figure.vp")
grid.text("centred\ntext")
于 2013-08-31T14:09:09.980 回答