grid的畫圖函數都含有just,可是just參數的是怎麼調節圖形位置的老是讓人很是費解,因而便寫了代碼來一探究竟。
思路很是簡單:放一個2*2的佈局viewport,每一個佈局裏面放一個viewport,每一個viewport都用了不一樣的just參數。just以後的矩形用藍色顯示,中心點的移動用箭頭表示出來, 這樣每一個參數對應圖形怎麼移動的都能一目瞭然。從如下的代碼也能學到如何安排佈局, 如何使用grobX和grobY得到grob對象的座標, 如何進行基本的viewport切換等。函數
library(grid) grid.newpage() # new page pushViewport(viewport(layout = grid.layout(2,2))) # 2 *2 layout # just top pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 1)) grid.rect() r1 <- rectGrob(0.5, 0.5, width = 0.2, height = 0.2, name = "r1") r2 <- rectGrob(0.5, 0.5, width = 0.2, height = 0.2, just = c("top"),gp=gpar(col="blue"), name = "r2") grid.draw(r1) grid.draw(r2) grid.segments(0.5,0.5,grobX(r2, 90), grobY(r2, 0), arrow=arrow(angle=15, type="closed"), gp=gpar(fill="black")) grid.text("just: top" ,0.6, 0.8) upViewport() # just left and top pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 2)) grid.rect() r1 <- rectGrob(0.5, 0.5, width = 0.2, height = 0.2, name="r1") r2 <- rectGrob(0.5, 0.5, width = 0.2, height = 0.2, just = c("left", "top"), gp=gpar(col="blue"), name="r2") grid.draw(r1) grid.draw(r2) grid.segments(0.5, 0.5, grobX(r2, 90), grobY(r2, 0), arrow=arrow(angle=15, type="closed",), gp=gpar(fill="black")) grid.text("just: left and top", 0.6, 0.8) upViewport() # just left and bottom pushViewport(viewport(layout.pos.col = 2, layout.pos.row = 1)) grid.rect() r1 <- rectGrob(0.5, 0.5, width = 0.2, height = 0.2, name="r1") r2 <- rectGrob(0.5, 0.5, width = 0.2, height = 0.2, just = c("left", "bottom"), gp=gpar(col="blue"), name="r2") grid.draw(r1) grid.draw(r2) grid.segments(0.5, 0.5,grobX(r2, 90), grobY(r2, 0), arrow=arrow(angle=15, type="closed",), gp=gpar(fill="black")) grid.text("just: left and bottom", 0.6, 0.8) upViewport() # just right bottom pushViewport(viewport(layout.pos.col = 2, layout.pos.row = 2)) grid.rect() r1 <- rectGrob(0.5, 0.5, width = 0.2, height = 0.2, name="r1") r2 <- rectGrob(0.5, 0.5, width = 0.2, height = 0.2, just = c("right", "bottom"), gp=gpar(col="blue"), name = "r2") grid.draw(r1) grid.draw(r2) grid.segments(0.5,0.5,grobX(r2, 90), grobY(r2, 0), arrow=arrow(angle=15, type="closed",), gp=gpar(fill="black")) grid.text("just: right and bottom", 0.6, 0.8) upViewport()