2016-12-04 1 views
0

Gibt es eine Möglichkeit, eine Breite für einen ggplot festzulegen?Gleiche Breite einiger ggplots kombiniert mit grid.arrange Funktion

Ich versuche, drei Zeitpläne in einer Spalte zu kombinieren. Wegen der y-Achsenwerte haben die Plots eine unterschiedliche Breite (zwei Plots haben Achsenwerte innerhalb des Bereichs (-20, 50), eins (18 000, 25 000) - was den Plot-Thiner macht). Ich möchte alle Plots genau die gleiche Breite haben.

plot1<-ggplot(DATA1, aes(x=Date,y=Load))+ 
    geom_line()+ 
    ylab("Load [MWh]") + 
    scale_x_date(labels = date_format("%m/%y"),breaks = date_breaks("months"))+ 
    theme_minimal()+ 
    theme(panel.background=element_rect(fill = "white")) 
plot2<-ggplot(DATA1, aes(x=Date,y=Temperature))+ 
    geom_line()+ 
    ylab("Temperature [C]") + 
    scale_x_date(labels = date_format("%m/%y"),breaks = date_breaks("months"))+ 
    theme_minimal()+ 
    theme(panel.background=element_rect(fill = "white")) 
plot3<-ggplot(DATA1, aes(x=Date,y=WindSpeed))+ 
    geom_line()+ 
    ylab("Wind Speed [km/h]") + 
    scale_x_date(labels = date_format("%m/%y"),breaks = date_breaks("months"))+ 
    theme_minimal()+ 
    theme(panel.background=element_rect(fill = "white")) 
grid.arrange(plot1, plot2, plot3, nrow=3) 

Kombinierte Grundstück sieht wie folgt aus: enter image description here

+0

Ich mag '? Cowplot :: plot_grid' besser als' grid arrange' wegen solchen Sachen, könnte einen Blick wert sein – Nate

+0

@NathanDay danke :) Ich werde es untersuchen. – ppi0trek

Antwort

1

Sie einfach Facettierschritt dafür verwenden können. Zuerst müssen Sie einige Daten munging tun:

library(tidyr) 

new_data = gather(DATA1, variable, value, Load, Temperature, WindSpeed) 

diese sammelt alle Daten in Load, Temperature und Windspeed in eine große Säule (value). Außerdem wird eine zusätzliche Spalte erstellt (variable), die angibt, welcher Wert im Vektor zu welcher Variablen gehört.

Danach können Sie die Daten plotten:

ggplot(new_data) + geom_line(aes(x = Date, y = value)) + 
    facet_wrap(~ variable, scales = 'free_y', ncol = 1) 

Jetzt wird ggplot2 kümmern sich um alle schweres Heben.

ps Wenn Sie Sie reproducible in Frage stellen, kann ich meine Antwort reproduzierbar machen.

+0

Vielen Dank! Genau das habe ich gesucht :) Meine Frage reproduzierbar zu machen, meinst du mein Datensatz hinzufügen? – ppi0trek

+0

Sie sollten sich bewusst sein, dass die Methode in dieser Antwort nicht berücksichtigt, dass die Variablen unterschiedliche Einheiten haben. Sie müssen die Y-Achsenbeschriftungen individuell einstellen, um den Unterschied in den Einheiten mit 'Annotate' zu berücksichtigen. –

+0

@JakeKaupp, danke, dass ich 'gsub' verwendet habe, um den Variablennamen für einen mit Einheit darin zu ändern. (new_data $ variable <- gsub ("Load", "Laden MWh", new_data $ Variable) Es hat gut funktioniert :) – ppi0trek