grid:如何指定限制以避免grid.points()绘制超出视口?

时间:2012-06-18 19:52:55

标签: r

我刚用grid尝试了我的第一步。我想建立一个2 x 2的方形散点图矩阵,其间有一些空间。为了获得空间,我实际上使用3 x 3布局(问题1:有更简单的方法吗?)。从下面的示例中可以看出,这些点被绘制在边界矩形之外。我不知何故必须在图中指定限制。问题2:如何做到这一点?最后,我可以使用基本图形来创建绘图吗? [我知道lattice图形可以使用,也可以使用标准layout(或ggplot2),但我感兴趣的是grid.layout是否也可以使用

require(grid)

## generate data to be plotted in the top left plot
X <- matrix(rexp(2000), ncol=2)

## plot device
file <- "foo.pdf"
pdf(file=file, width=10, height=10)

## set up grid.layout
gl <- grid.layout(3, 3, respect=rbind(c(0,1,0), c(1,1,1), c(0,1,0)),
                  widths=unit(c(3,1,3), "inches"), heights=unit(c(3,1,3), "inches")) # define grid layout

pushViewport(viewport(layout=gl)) # use this layout in a viewport

## (1,1) plot
pushViewport(viewport(layout.pos.row=1, layout.pos.col=1, name="11"))
grid.points(X[,1], X[,2], pch=1) # points
grid.rect() # bounding rectangle
grid.xaxis() # x-axis
grid.yaxis() # y-axis
grid.text(expression(italic(X[1])), y=unit(-3, "lines")) # x-axis label
grid.text(expression(italic(X[2])), x=unit(-3, "lines"), rot=90) # y-axis label
grid.text("Plot 1", x=0.86, y=0.9, gp=gpar(fontface="bold", cex=1.6)) # add label
upViewport()

## (1,2) plot
pushViewport(viewport(layout.pos.row=1, layout.pos.col=3, name="13"))
grid.rect()
upViewport()

## (2,1) plot
pushViewport(viewport(layout.pos.row=3, layout.pos.col=1, name="31"))
grid.rect()
upViewport()

## (2,2) plot
pushViewport(viewport(layout.pos.row=3, layout.pos.col=3, name="33"))
grid.rect()
upViewport()

## plot device
dev.off()

1 个答案:

答案 0 :(得分:3)

您需要拥有正确的坐标系:将数据转换为“npc”单位,或者设置一个包含从您的数据派生的本机单位的视口,

pushViewport(dataViewport(X[,1], X[,2], 
               layout.pos.row=1, layout.pos.col=1, name="11"))

按预期工作。

关于问题1,看看github上的gtable包;它正在开发中,以便为ggplot2和其他基于网格的图形框架提供便利。