Multiplot mit ggplot

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
Ilonia
Beiträge: 30
Registriert: Mi Aug 09, 2017 3:50 pm

Multiplot mit ggplot

Beitrag 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
Dateianhänge
Test-Data.txt
(456 Bytes) 81-mal heruntergeladen
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Multiplot mit ggplot

Beitrag 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.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Ilonia
Beiträge: 30
Registriert: Mi Aug 09, 2017 3:50 pm

Re: Multiplot mit ggplot

Beitrag 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
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Multiplot mit ggplot

Beitrag 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.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Ilonia
Beiträge: 30
Registriert: Mi Aug 09, 2017 3:50 pm

Re: Multiplot mit ggplot

Beitrag 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
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Multiplot mit ggplot

Beitrag 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.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten