2016-03-24 5 views
19

के साथ भूखंडों की चौड़ाई और ऊंचाइयों को निर्दिष्ट करें मेरे पास तीन भूखंड हैं और मैं उन्हें ग्रिड.रेंज के साथ गठबंधन करने का प्रयास करता हूं। आखिरी साजिश में पहले दो भूखंडों की तुलना में छोटी ऊंचाई होनी चाहिए और सभी भूखंडों की एक ही चौड़ाई होनी चाहिए।grid.arrange

एक काम कर उदाहरण:

p1 <- qplot(mpg, wt, data=mtcars) 
p2 <- p1 
p3 <- p1 + theme(axis.text.y=element_blank(), axis.title.y=element_blank()) 

grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2), 
     arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1)) 

enter image description here

इधर, पिछले साजिश से पहले दो एक बड़ा चौड़ाई है। मेरे असली डेटा में, भले ही मैं वाई-अक्ष पर टेक्स्ट और शीर्षक रखूं, फिर भी मेरे पास तीसरी साजिश के लिए एक अलग चौड़ाई है।

मैं "चौड़ाई" जोड़ने की कोशिश की:

grid.arrange(arrangeGrob(p1,p2, ncol=1, nrow=2), 
     arrangeGrob(p3, ncol=1, nrow=1), heights=c(4,1), widths=c(2,1)) 

लेकिन यह एक दो स्तंभ साजिश में बदल जाता है ...

enter image description here

मैं भी एक और कोड की कोशिश की:

p1 <- ggplotGrob(p1) 
p2 <- ggplotGrob(p2) 
p3 <- ggplotGrob(p3) 
# 
stripT <- subset(p2$layout, grepl("spacer", p2$layout$name)) 
p3 <- p3[-stripT$t, ] 

grid.draw(rbind(p1, p2, p3, size = "first")) 

मेरे पास समान चौड़ाई है लेकिन अब मुझे नहीं पता कि ऊंचाई को कैसे बदला जाए ...

enter image description here

ठीक है, कोई मुझे एक अंतिम साजिश के लिए दोनों ऊंचाई और चौड़ाई पहलुओं गठबंधन करने के लिए मदद कर सकते हैं?

उत्तर

20

cowplot पैकेज से plot_grid का प्रयास करें:

library(ggplot2) 
library(gridExtra) 
library(cowplot) 
p1 <- qplot(mpg, wt, data=mtcars) 
p2 <- p1 
p3 <- p1 + theme(axis.text.y=element_blank(), axis.title.y=element_blank()) 
plot_grid(p1, p2, p3, align = "v", nrow = 3, rel_heights = c(1/4, 1/4, 1/2)) 

enter image description here

+0

वास्तव में क्या मैं के लिए, बहुत बहुत शुक्रिया देख रहा था आप ग्रिड इकाइयों के सभी प्रकार के मिश्रण कर सकते हैं: बिट वर्बोज़, इस दृष्टिकोण रिश्तेदार ऊंचाइयों को निर्दिष्ट की तुलना में अधिक सामान्य है! – Chika

5

gtable के साथ पैनल मैन्युअल की ऊंचाई निर्धारित करने की आवश्यकता,

g1 <- ggplotGrob(p1) 
g2 <- ggplotGrob(p2) 
g3 <- ggplotGrob(p3) 

library(gridExtra) 
g <- rbind(g1, g2, g3) 

set_panel_heights <- function(g, heights){ 
    g$heights <- grid:::unit.list(g$heights) # hack until R 3.3 comes out 
    id_panels <- unique(g$layout[g$layout$name=="panel", "t"]) 
    g$heights[id_panels] <- heights 
    g 
} 

g <- set_panel_heights(g, lapply(1:3, grid::unit, "null")) 
grid::grid.draw(g) 

enter image description here

एक यद्यपि ,

grid::grid.newpage() 
g <- do.call(rbind, replicate(3, ggplotGrob(ggplot()), simplify = FALSE)) 
g <- set_panel_heights(g, list(unit(1,"in"), unit(1,"line"), unit(1,"null"))) 
grid::grid.draw(g) 

enter image description here

संबंधित मुद्दे