2014-06-20 13 views
15

FRAGDie Gefahren von Plots in ggplot

Wie Ausrichten Sie separate Parzellen (ggplot2) kombinieren, mit unterschiedlicher y-Achse und unterschiedlichen Höhen Plot, noch Ausrichtung behalten?

DETAIL

Wenn Plots mit grid.arrange (method1) mit unterschiedlichen y-Achseneinheiten kombiniert, sie nicht ausrichten. Eine Möglichkeit ist es, gtable (method2) zu verwenden, aber ich kann die relative Höhe der Plots nicht anpassen.

BEISPIEL

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)) 

Methode 1 Ergebnisse in dieser Handlung, die aufgrund der unterschiedlichen Länge der Y-Achse Etiketten falsch ausgerichtet ist:

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) 

Methode 2 Ergebnisse fluchtend Diagramme, aber ich kann die Höhe der einzelnen Plots nicht anpassen.

DANKE!

+1

[** Dies könnte helfen **] (http://stackoverflow.com/a/16368413/1478381) –

Antwort

17

In Ihrem gtable g, können Sie die relativen Elementhöhen eingestellt,

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

Works fehlerlos und viel bessere ergebnisse als die grid.arrange-methode. Vielen Dank. – wab

+0

Danke für die tolle Antwort! Aber vielleicht hat sich bei den Grid-Updates etwas geändert, aber jetzt (Version 3.3.0) muss die zweite Zeile funktionieren: 'g $ heights [panels] <- unit (c (2,1)," null ")' –

+0

@RNoob korrekt, die Dinge haben sich auf dieser Ebene sowohl im Grid als auch in ggplot2 geändert – baptiste