2014-06-20 9 views
15

प्रश्नggplot में भूखंडों संरेखित के खतरों

कैसे आप अलग भूखंडों (ggplot2), विभिन्न y- अक्ष और विभिन्न साजिश ऊंचाइयों के साथ गठबंधन करते हैं, अभी तक संरेखण को बनाए रखने?

विवरण

जब grid.arrange (Method1) के साथ भूखंडों के संयोजन, विभिन्न y- अक्ष इकाइयों के साथ, वे संरेखित नहीं करते। इसके आसपास एक तरीका gtable (method2) का उपयोग करना है, लेकिन मैं भूखंडों की सापेक्ष ऊंचाई समायोजित नहीं कर सकता।

उदाहरण

require(ggplot2) 

#Make two plots, with different y axis 
    x = c(1, 5) 
    y= c(.1, .4) 
    data1<-data.frame(x,y) 
    top<- 
    ggplot(data1, aes(x=x, y=y))+ 
    geom_line() 

    x = c(1, 5) 
    y= c(100000, 400000) 
    data2<-data.frame(x,y) 
    bottom<- 
    ggplot(data2, aes(x=x, y=y))+ 
    geom_line() 


# Method 1 - Grid Extra 
    require(gridExtra) 
    grid.arrange(top, bottom, heights=c(.6,.3)) 

विधि 1 परिणाम इस साजिश है, जो गलत संरेखित है में अलग अलग लंबाई y अक्ष लेबल की वजह से:

enter image description here

#Method 2 - gtable 
    require(gtable) 
    #Extract Grobs 
    g1<-ggplotGrob(top) 
    g2<-ggplotGrob(bottom) 
    #Bind the tables 
    g<-gtable:::rbind_gtable(g1, g2, "first") 
    #Remove a row between the plots 
    g <- gtable_add_rows(g, unit(-1,"cm"), pos=nrow(g1)) 
    #draw 
    grid.newpage() 
    grid.draw(g) 

विधि को संरेखित में 2 परिणाम भूखंड, लेकिन मैं प्रत्येक साजिश की ऊंचाई समायोजित नहीं कर सकता। enter image description here

धन्यवाद!

+1

[** यह मदद कर सकता है **] (http://stackoverflow.com/a/16368413/1478381) –

उत्तर

17

अपने gtable g में, आप रिश्तेदार पैनल ऊंचाइयों सेट कर सकते हैं,

require(gtable) 
g1<-ggplotGrob(top) 
g2<-ggplotGrob(bottom) 
g<-gtable:::rbind_gtable(g1, g2, "first") 
panels <- g$layout$t[grep("panel", g$layout$name)] 
g$heights[panels] <- unit(c(1,2), "null") 

grid.newpage() 
grid.draw(g) 
+0

वर्क्स निर्दोष रूप से, और grid.arrange विधि से बेहतर परिणाम। धन्यवाद। – wab

+0

महान उत्तर के लिए धन्यवाद! लेकिन शायद ग्रिड के अपडेट में कुछ बदल गया है, लेकिन इसके लिए दूसरी संस्करण काम करने के लिए अब (संस्करण 3.3.0) होना चाहिए: 'जी $ ऊंचाई [पैनल] <- इकाई (सी (2,1)," शून्य ")' –

+0

@RNoob सही, ग्रिड और ggplot2 दोनों में उस स्तर पर चीजें बदल गई हैं – baptiste

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