2017-01-02 9 views
6

मैं इस समाधान (How can I change the size of the strip on facets in a ggplot?1) लागू करने के लिए एक ggplot में पहलुओं पर पट्टी का आकार बदलने की कोशिश की है, मैं ऊंचाई आकारसंपादित पट्टी आकार ggplot2

library(ggplot2) 
library(gtable) 

d <- ggplot(mtcars, aes(x=gear)) + 
      geom_bar(aes(y=gear), stat="identity", position="dodge") + 
      facet_wrap(~cyl) 

g <- ggplotGrob(d) 
g$heights[[3]] = unit(5,"in") 

grid.newpage() 
grid.draw(g) 

यह मैं क्या मिलता है बढ़ाने के लिए है, यह केवल स्ट्रिप के शीर्ष पर स्थान (सफेद) को बढ़ाता है: enter image description here

यह अलग-अलग क्यों काम करता है?

+1

नई 'ggplot2 के संस्करण 'एक ओवरहाल्ड पहलू प्रणाली है, यही कारण है कि यह अब काम नहीं करता है। – Axeman

उत्तर

14

एक सरल समाधान उचित रूप से अपने strip.text तत्वों के हाशिये निर्दिष्ट करने के लिए है:

आप के साथ दूसरे चरण के लिए स्वचालित कर सकते हैं

ggplot(mtcars, aes(x=gear)) + 
    geom_bar(aes(y=gear), stat="identity", position="dodge") + 
    facet_wrap(~cyl) + 
    theme(strip.text.x = element_text(margin = margin(2,0,2,0, "cm"))) 

enter image description here

2

कुछ इस तरह काम करने लगता है:

g$heights[[6]] <- unit(5,"in") 
g$grobs[[17]]$heights <- unit(2,"in") 
g$grobs[[18]]$heights <- unit(2,"in") 
g$grobs[[19]]$heights <- unit(2,"in") 

grid.newpage() 
grid.draw(g) 

नोट g$grobs को देखकर हमें 17, 18 और 19 grobs स्ट्रिप्स हैं बताता है कि।

index <- which(sapply(g$grobs, function(x) x$name == "strip")) 
g$grobs <- lapply(seq_along(g$grobs), function(.x) { 
    if(.x %in% index) { 
    g$grobs[[.x]]$heights <- unit(2,"in") 
    } 
    g$grobs[[.x]] 
}) 

enter image description here

+0

धन्यवाद। तो, मूल रूप से 'जी $ ऊंचाई [[6]] <- इकाई (5," इन ") 'स्ट्रिप को ले जाती है, जबकि' जी $ grobs [[17]] $ ऊंचाई <- इकाई (2, "में") ' स्ट्रिप क्षेत्र बढ़ाता है। लेकिन मैं – Al14

+1

इकाइयों के बीच सहसंबंध नहीं देख सकता यह सही है। ऐसा लगता है कि इकाइयों को आवंटित करने के बाद 'जी $ ऊंचाइयों [[6]] '' 5 सेमी' देता है क्योंकि इकाइयां थोड़ा अजीब हैं। मैं बस थोड़ा सा खेला। – Axeman

+1

ग्रिड इकाइयों के लिए कोई [[<-' विधि नहीं है। हाल ही में हाल ही में '[<-'' के लिए पेश किया गया था, लेकिन यह नोट करता है कि यह परिणाम 'unit.list' पर ले जाता है। – baptiste