1
我有兩個格子圖。我需要將一個位置放在另一個之上,我需要在它們之間有0.5英寸的垂直空間。我的想法是使用grid.layout
來指定三行佈局,中間行的高度正好是0.5英寸。然後我可以打印一張圖到最上一行,其他圖打印到最下一行。用grid.layout繪製陰謀的確切位置
它幾乎工作。問題是,我不能讓中間一行是恰好0.5" 高這裏有一個小例子:
pdf(file='example.pdf', height=12)
# Create layout and viewports
masterLayout <- grid.layout(
nrow = 3,
ncol = 1,
heights = unit(c(1, .5, 1), c("null", "inches", "null")),
respect = matrix(c(0, 1, 0)))
vp1 <- viewport(layout.pos.row=1, just=c("center", "bottom"))
vp2 <- viewport(layout.pos.row=3, just=c("center", "top"))
# Create plots
plot1 <- xyplot(1 ~ 1, panel = function() grid.rect(gp=gpar(fill="black")))
plot2 <- xyplot(1 ~ 1, panel = function() grid.rect(gp=gpar(fill="red")))
# Push viewports and print plots
pushViewport(viewport(layout = masterLayout))
pushViewport(vp1)
print(plot1, newpage = FALSE)
upViewport()
pushViewport(vp2)
print(plot2, newpage = FALSE)
dev.off()
我試過這個例子很多變化,但我一直沒能將地塊之間的距離固定在.5「。有沒有辦法做到這一點?
更新: baptiste下面的答案很好。參見Deepayan Sarkar在https://stat.ethz.ch/pipermail/r-help/2012-June/316178.html的回答。
非常感謝你。我試過你的代碼,它工作。但是我注意到它只在沒有指定panel.height時才起作用。例如,如果我只將print(plot1,draw.in =「vp1」)更改爲'print(plot1,draw.in =「vp1」,panel.height = list(x = 1,units =「in」 )'',矩形之間的空間突然佔據超過.5「。問題是plot1(即頂部矩形)沒有繪製在vp1的底部。有沒有辦法讓示例在面板工作。高度是指定爲一個還是兩個地塊? – user697473
不幸的是,我不使用格子足以知道這個副作用,它似乎用視口做了些有趣的事情,如果我是,我會問Deepayan S.你。 – baptiste
再次感謝。我發送了一條消息給r-help;如果我收到回覆,我會在這裏發佈一個鏈接。 – user697473