1
我想繪製這樣的圖像,在堆疊的矩形內部有一些基礎圖形。在grid.layout中使用grid.layout與grid包:繪製順序的奇怪影響
我有一個繪圖功能,以產生與堆積圖(此矩形)的地塊:
stackedplot <- function(main=""){
top.vp <- viewport(
layout=grid.layout(5, 2,
widths=unit(c(2, 1), c("lines", "null")),
heights=unit(c(3, 1, 1, 1, 5),
c("lines", "null", "null", "null", "lines"))))
p1 <- viewport(layout.pos.col=2, layout.pos.row=2, name="plot1",
default.units="native")
p2 <- viewport(layout.pos.col=2, layout.pos.row=3, name="plot2",
default.units="native")
p3 <- viewport(layout.pos.col=2, layout.pos.row=4, name="plot3",
default.units="native")
xaxis <- viewport(layout.pos.col=2, layout.pos.row=5, name="xaxis")
label1 <- viewport(layout.pos.col=1, layout.pos.row=2, name="label1")
label2 <- viewport(layout.pos.col=1, layout.pos.row=3, name="label2")
label3 <- viewport(layout.pos.col=1, layout.pos.row=4, name="label3")
title <- viewport(layout.pos.col=2, layout.pos.row=1, name="title")
splot <- vpTree(top.vp, vpList(p1,p2,p3,xaxis,label1,label2,label3,title))
pushViewport(splot)
seekViewport("plot1")
# par(plt=gridPLT()) # Needed for plotting base graphics, but not here
grid.rect(width=unit(0.9, "npc")) # This to be replaced with a base graphics plot in the final version
seekViewport("plot2")
# par(plt=gridPLT())
grid.rect(width=unit(0.9, "npc"))
seekViewport("plot3")
# par(plt=gridPLT())
grid.rect(width=unit(0.9, "npc"))
seekViewport("xaxis")
grid.text("X label", y = unit(3, "lines"))
seekViewport("label1")
grid.text("1", x = unit(2, "lines"), rot=90)
seekViewport("label2")
grid.text("2", x = unit(2, "lines"), rot=90)
seekViewport("label3")
grid.text("3", x = unit(2, "lines"), rot=90)
seekViewport("title")
grid.text(main, y = unit(1, "lines"), gp = gpar(fontsize = 20))
}
創建具有四個堆疊地塊一個2x2格我嘗試使用下面的代碼:
grid.newpage()
multitop.vp <- viewport(layout=grid.layout(2,2))
pl1 <- viewport(layout.pos.col=1, layout.pos.row=1, name="A")
pl2 <- viewport(layout.pos.col=1, layout.pos.row=2, name="B")
pl3 <- viewport(layout.pos.col=2, layout.pos.row=1, name="C")
pl4 <- viewport(layout.pos.col=2, layout.pos.row=2, name="D")
vpall <- vpTree(multitop.vp, vpList(pl1,pl2,pl3,pl4))
pushViewport(vpall)
seekViewport("A")
stackedplot(main="A")
seekViewport("B")
stackedplot(main="B")
seekViewport("C")
stackedplot(main="C")
seekViewport("D")
stackedplot(main="D")
這不起作用,因爲所有的圖都繪製在網格的同一個單元格中。
但是,如果我以相反的順序繪製出來,我得到了我想要的圖形(圖1)。
seekViewport("D")
stackedplot(main="D")
seekViewport("C")
stackedplot(main="C")
seekViewport("B")
stackedplot(main="B")
seekViewport("A")
stackedplot(main="A")
我嘗試了不同的名稱,發現,如果我按顛倒的字母順序繪製,一切工作正常。一旦我嘗試在按名稱字母順序排列名稱的視口中繪圖,其後所有其他繪圖都繪製在同一個單元格中。這是爲什麼發生?