2017-09-19 3 views
0

Aus einem Datensatz von Daten im langen Format, der erste Plot Anruf unten gibt mir diese Matrix von joyplots: enter image description here Es gibt eine Ridgeline und Farbskala über jedes der 13 Szenarien.Wie extrahiert man einzelne Plots von facet_plot und behält die Skalierung bei?

Wenn ich jedoch versuche, nur einen Plot pro Seite anzuzeigen, wird im unten aufgelisteten 'SingleScenario'-Plotaufruf die Skalierung für die einzelnen Teildatensätze pro Szenario min und max durchgeführt (jede Plot hat das volle Gelb zu lila Farbskala, und ich bin mir nicht sicher, ob die Höhe der Grathöhe beibehalten oder zurückgesetzt wird).

Wie zeichne ich einzelne Szenarien als einzelne Seiten auf und behalte die ursprüngliche Skalierung bei? Auf diese Weise werden Unterschiede durch Blättern in einer 13-seitigen PDF-Datei visualisiert.

library(ggplot2) 
library(viridis) 

matrix <- ggplot(df, aes(watermonth, as.integer(wateryear), height = inflow, group=as.integer(wateryear) 
      , fill=cumWYinf)) + geom_ridgeline(stat = "identity", 
      show.legend = F, scale = 0.005, alpha = 0.8) + facet_wrap(~scenario, nr=4, nc=4) + 
      scale_fill_viridis() 


scenarios <- c("q0", "e1", "e2", "e3", "e4", "e5", "cwc30", "l1", "l2", "l3", "l4", "l5", "cwc70") 

for(i in 1:length(scenarios)) { 

facets <- c(paste0(scenarios[i])) 

SingleScenario <- ggplot(df[df$scenario %in% facets,], aes(watermonth, as.integer(wateryear), 
     height = inflow, group=as.integer(wateryear), fill = cumWYinf)) + 
     geom_ridgeline(stat = "identity", show.legend = F, scale = 0.005, alpha = 0.9) + 
     + facet_wrap(~scenario, nr=1, nc=1) + scale_fill_viridis() 

SingleScenario 
ggsave(paste(scenarios[i],".pdf"), dpi = 300, width = 17, height = 11, units = "in") } 

Vielen Dank.

date  watermonth wateryear inflow scenario SacWYT SJRWYT cumWYinf 
    <date>   <dbl>  <dbl> <dbl> <chr> <int> <int> <dbl> 
1 1921-10-31   1  1922 66.38  q0  2  2 2293.78 
2 1921-11-30   2  1922 50.65  q0  2  2 2293.78 
3 1921-12-31   3  1922 82.09  q0  2  2 2293.78 

Antwort

1

Es ist sehr schwer, ohne Beispiel-Datensatz zu beantworten meine Vorhersage zu testen, aber können Sie mit limits = ... füllen versuchen Einstellens:

scale_fill_viridis(limits = range(df$cumWYinf))

diese Weise werden alle Plots den gleichen Maßstab haben.

+0

Vielen Dank @PoGibas! Das sorgte für die perfekte Farbfüllung. Ich bin gespannt, ob die Höhenskala etwas ähnliches benötigt, um den gesamten Höhenbereich zu sehen. – doconnor

+0

@doconnor Ja, ich würde ähnliches für die 'y-Achse' machen! Sie können das einfach mit: 'scale_y_continous (limits = range (df $ yourYvariable))'. Wenn meine Antwort Ihr Problem gelöst hat, können Sie es akzeptieren :-) – PoGibas

+0

@doconnor können Sie meine Antwort akzeptieren, damit wir diese Frage schließen können. Vielen Dank! – PoGibas

Verwandte Themen