Seite 1 von 1

Multiplot mit ggplot

Verfasst: Sa Mär 31, 2018 6:38 pm
von Ilonia
Hallo zusammen,

ich habe folgendes Problem, bei dem ich hoffe, einer von euch kann mir weiterhelfen.

In meinem Datensatz habe ich einmal Temperatur-Daten, sowie Niederschlag und relative Feuchte. Diese würde ich gerne in einem Plot zusammen fassen mit gleicher x-Achse, und unterschiedlichen Y-Achsen
Ich arbeite mit ggplot und weiß, man kann mit facet_grid beispielsweise die Plots horizontal oder vertikal anorden.
Das funktioniert auch mit unterschiedlichen Graphikparametern wie geom_line und geom_bar ganz wunderbar.

Code: Alles auswählen

Test<- read.table("Test-Data.txt",sep="\t", header=T, stringsAsFactors = F,na.strings="NA")

Test_melt<- melt(Test,id=c("Date"))

a<-ggplot(Test_melt,aes(Date,value,group=1))+ facet_grid(variable ~.,scales="free")+
  geom_line(data=subset(Test_melt,variable=="Mean"))+
  geom_line(data=subset(Test_melt,variable=="rH"))+
  geom_bar(stat="identity",data=subset(Test_melt,variable=="PCP"))

a 
  
Allerdings, würde ich gerne den Niederschlag (PCP) und die Temperatur (Mean) in EINEN Plot packen mit unterschiedlichen y-Achsen. Und "drüber" als eigenen Plot und eigener Y-Achse aber identischer X-Achse die relative Feuchte (rH).

Folgendermaßen sieht dieses Skript aus:

Code: Alles auswählen

Test$Date <- strptime(Test$Date,"%Y-%m-%d %H:%M:%S")

cols <- c("Mean" ="red", "PCP"="darkblue")
b<-ggplot(Test, aes(x=Date)) +
  geom_bar(stat="identity",aes(y=PCP/1,fill="PCP")) +
  geom_line(aes(y=Mean , colour="Mean")) +
  ylab(" Mean")+
  scale_x_datetime(breaks=date_breaks("12 hour"), labels=date_format("%d"))+
  scale_fill_manual(values=cols)+
  scale_color_manual(values=cols)+
  scale_y_continuous(sec.axis=sec_axis(~.*1,name="PCP]"))+
  coord_cartesian(ylim = c(0, 25))
b
Hat einer vielleicht eine Idee?

Vielen Dank, schönes Wochenende und schöne Ostern!

Isabel

Re: Multiplot mit ggplot

Verfasst: Sa Mär 31, 2018 8:39 pm
von EDi
Allerdings, würde ich gerne den Niederschlag (PCP) und die Temperatur (Mean) in EINEN Plot packen mit unterschiedlichen y-Achsen.
Ein sekundäre y-Achse geht mit ggplot nur wenn die 2-y-achse eine 1:1 transformation der ersten ist: http://ggplot2.tidyverse.org/reference/sec_axis.html

Keine Ahnung ob das für dein Problem passend ist (ich vermute nicht). Siehe auch https://rpubs.com/MarkusLoew/226759

Um mehrere ggplots zu verbinden gibts cowplot https://cran.r-project.org/web/packages ... ction.html oder patchwork https://github.com/thomasp85/patchwork. Letzteres ist einfacher.

Re: Multiplot mit ggplot

Verfasst: So Apr 01, 2018 1:40 pm
von Ilonia
Vielen Dank, Edi für deine Links.

Ich habe jetzt "patchwork" probiert, es funktioniert auch, allerdings macht es nicht 100% das was ich gerne hätte.
Vielleicht habe ich mich in meinem ersten Post auch etwas umständlich ausgedrückt. Ich hätte gerne, dass die unterschiedlichen Graphiken exakt untereinander liegen.
Also dass sie eine Y-Achse haben (mit unterschiedlicher Achseneinteilung) und nur eine X-Achse.
Gibt es hierfür eine Möglichkeit?
Ansonsten muss ich wohl in den sauren Apfel beißen und alles mit Inkscape zusammenbasteln...

Liebe Grüße

Re: Multiplot mit ggplot

Verfasst: So Apr 01, 2018 8:18 pm
von EDi
Also dass sie eine Y-Achse haben (mit unterschiedlicher Achseneinteilung) und nur eine X-Achse
:?: Ein x-Achse und eine y-Achse, also nur ein plot? Und dann Farbe dazu (für Temp / Feuchte)?
Einfach ins lange Format bringen (z. b. tidyr::gather()) um Temp und Feuchte untereinander zu schreiben samt Indikatorvariable. Dann diese zu färben benutzen.

Re: Multiplot mit ggplot

Verfasst: So Apr 01, 2018 8:43 pm
von Ilonia
Jein...
Also ich hätte bei der linken Y-Achse dann gerne eine Beschriftung von -10 bis 20 (für die Temperatur) und dann drüber ne neue Y-Achsen-Einteilung von 0-100) für die Feuchte...

Vielleicht ist mein Problem auch so speziell, dass sie darüber noch keiner gedanken gemacht hat :oops:

Liebe Grüße

Re: Multiplot mit ggplot

Verfasst: Mo Apr 02, 2018 1:45 am
von EDi
Also zwei Plots übereinander, mit gleicher x-Achse und unterschiedlichen y-Achsen? Dann mit facet_grid arbeiten.


Weil eine unkontinuierliche y- Achse bringt doch nur verwirrung? Was ist z. b eine Temperatur von 25, das liegt ja dann auf der Feuchte Skala und die Achse zeigt mir den falschen Wert. Halte ich für keine gute Idee... und ist zuguterrecht mit ggplot/grid nur schwer realisierbar.