grid.text和视口中的定位

时间:2013-11-29 08:17:43

标签: r ggplot2

我正在尝试并排创建两个图并注释它们:

setEPS(horizontal = FALSE, onefile = FALSE, paper = "special")

vplayout <- function(x, y) {
  viewport(layout.pos.row = x, layout.pos.col = y)
}

postscript(file="test.eps")
grid.newpage()
pushViewport(viewport(layout = grid.layout(1,2)))

plot1 <- qplot(rnorm(100))
grid.text('plot1')
print(plot1,vp=vplayout(1,1))

plot2 <- qplot(rnorm(10))
grid.text('plot2')
print(plot2,vp=vplayout(1,2))

dev.off()

问题在于我无法在每个单独的图上绘制标签,而是在背景中的两个图后面显示。 我尝试使用upViewport()popViewport()downViewport()进行试验,但没有成功。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您必须指定要在其中打印文本标签的视口:grid.text('plot1', vp=vplayout(1,1))。您还应指定要在视口中打印的位置。默认情况下,它会在中心打印文本。而且,您打印的顺序很重要。所以首先将图形倾斜,然后将标签放在顶部。总而言之,您的代码看起来应该是这样的:

grid.newpage()
pushViewport(viewport(layout = grid.layout(1,2)))

plot1 <- qplot(rnorm(100))
print(plot1,vp=vplayout(1,1))
grid.text('plot1', x=.5, y=.95, vp=vplayout(1,1))

plot2 <- qplot(rnorm(10))
print(plot2,vp=vplayout(1,2))
grid.text('plot2', x=.5, y=.95, vp=vplayout(1,2))

您也可以使用ggtitle代替grid.text。如果您使用gridExtra包,则可以完全避免视口:

require(gridExtra)
grid.arrange(
  plot1 + ggtitle('plot1'), 
  plot2 + ggtitle('plot2'),
  nrow=1)