2012-06-18 35 views
1

我剛剛嘗試了我的第一步grid。我想建立一個2 x 2的正方形散點圖矩陣,其間有一些空間。爲了獲得空間,我實際上使用了3 x 3佈局(問題1:是否有更簡單的方法?)。從下面的示例中可以看出,這些點在邊界矩形外繪製。我不知何故必須在劇情中指定限制。問題2:如何做到這一點?最後,我可以使用基礎圖形來創建圖表嗎? [我知道lattice圖形會工作,也是一個標準layout可以使用(或ggplot2),但我有興趣,如果可能的話與grid.layout,太]grid:如何指定限制以避免grid.points()繪製在視口之外?

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() 
+0

在視口中使用'clip = TRUE'? – baptiste

+0

另請參閱'dataViewport'和'grid.multipanel()' – baptiste

+0

剪切關閉區域;我想要顯示所有數據。 '?grid.multipanel'只給了我'grid-internal',它不應該被使用(就像它說的那樣)。我嘗試在'(1.1)'中的'pushViewport'後面使用'pushViewport(dataViewport(X [,1],X [,2]))',但是獲得'Push.vp.default(X [[1L] ],...):只有在推送視口時纔有效' –

回答

3

你需要有正確的座標系:要麼轉換您的數據「人大」單位,或建立一個視與您的數據得到的本地單位,

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

按預期工作。

關於問題1,請看github上的gtable包;它正在開發中,以促進ggplot2和其他基於網格的圖形框架的這類事情。

+0

賓果。我正準備發佈相同的建議。另外,'vignette(「grid」)'第四部分的第一個例子是如何使用'dataViewport()'和'plotViewport()'來構造一個簡單的散點圖的很好的演示。 –

+0

非常感謝,現在正在工作! –