我有一个多面板格子图。它具有偶数个等宽列。我希望将文本放在列中。
有时,这很容易做到。例如,xlab
和main
参数通常可以很好地处理这项工作。但我想要一个更灵活的解决方案。 (我有许多字符串,并希望将它们定位在不同的高度,但总是以列为中心。)
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()
绘制行标签。但是有更简单的解决方案吗?
答案 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))
答案 1 :(得分:0)
Paul Murrell provides this answer,无论绘图的布局(面板的行数和列数)如何,它似乎都有效:
downViewport("plot_01.figure.vp")
grid.text("centred\ntext")