Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Eva
Beiträge: 9
Registriert: Fr Mai 20, 2022 2:14 pm

Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von Eva »

Hallo,

ich schreibe aktuell meine BA und bin noch recht neu bei R.
Ich habe bereits eine for-Schleife programmiert, die mir 156 Retentionskurven (einzelne Abbildungen) ausgibt. Nun möchte ich aber eine Abbildung mit 156 Grafen haben, damit die Auswertung der Daten erstmal übersichtlicher wird.

Das ist meine for-Schleife von der ich 156 einzlene Grafiken angezeigt bekomme:
R-for-Schleife.PNG
Jetzt habe ich mit ggplot versucht das ganze in eine Abbildung zu stecken, bin da aber etwas am verzweifeln :(
Das habe ich bereits programmiert, allerdings funktioniert es leider nicht und ich weiß auch nicht genau wo der Fehler ist, bzw. benutze zum ersten Mal
R-ggplot.PNG
R-ggplot.PNG (9.86 KiB) 1763 mal betrachtet
Wenn mir Jemand helfen könnte wäre das echt Klasse!!

Vielen Dank schonmal Eva :)
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von Athomas »

Ich verstehe Dich so, dass Du die 156 Graphen in einer (ich nehme an PDF-) Datei haben willst?
Dafür gibt es in der Funktion pdf() den Parameter "onefile"...
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von schubbiaschwilli »

Gude!

Vielleicht fangen wir etwas weiter vorher an... Kannst du vielleicht die Daten für 2 oder 3 dieser Kurven liefern, und kurz skizieren, wie das aussehen soll? Die Frage ist, was du genau haben willst - Sind das 156 Balken, Punkte, ... in einem Plot, oder einen Plot mit 156 Subplots, und wie die Daten aussehen - Sie sollten ja schon in einem dataframe oder so vorliegen, den man mit einer Schleife durchlaufen kann - In deinem Code sehe ich zwar einen Zähler i, und der wird mit einer Variablen RetCurve benutzt, aber...

Dank&Gruß
Schubbiaschwilli
Eva
Beiträge: 9
Registriert: Fr Mai 20, 2022 2:14 pm

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von Eva »

Hallo,

erstmal Danke für eure Antworten :)
also ich habe eine Tabelle mit 156 Bodentypen: (das ist nur ein Teil der Tabelle)
daten.PNG
Für jede Reihe wird eine Retentionskurve (Graph) in einer einzelnen Abbildung dargestellt. Also ich bekomme dann 156 einzelene Fenster die aufploppen. Das habe ich bisher auch geschafft mit der for-schleife zu programmieren.
Jetzt möchte ich aber das R mir für die Tabelle mit 156 Daten bzw dann 156 Graphen, diese in einer Abbildung darstellt. Vom Beispiel her so:
pf-beispiel.PNG
Also eine Tabelle, 156 Daten, 156 Graphen, 1 Koordinatensystem

Vielen Dank :)
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von bigben »

Hallo Eva,

Wenn die Tabelle 156 Zeilen hat und jede Zeile drei Messwerte - besteht dann jede Kurve aus 3 Werten? Oder habe ich Deine Tabelle noch nicht verstanden?
Steckt da noch Informationen in den Werte von Sample-ID?
Dein Code bezieht dich auf die Spalten pF und TH, beide Spaltennamen kommen in der Beispieltabelle nicht vor. Das ist alles ein wenig verwirrend, zugleich sollte eine Grafik wie die von Dir gezeigte möglich sein.
Zuletzt: Willst Du jetzt die "alten" Grafikfunktionen nutzen wie im ersten Codebeispiel oder ggplot2 wie im Zweiten? Das Vorgehen ist bei beiden Varianten unterschiedlich.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von schubbiaschwilli »

Gude!

Mal ein Minimalbeispiel - Einmal mit dem 'normalen' plot, einmal mit ggplot

Code: Alles auswählen

data <- data.frame(x=seq(-5,5,length.out=101))
data$y1 <- atan(data$x)
data$y2 <- pnorm(data$x)
data$y3 <- 1/(1+exp(-data$x))
data$y4 <- atan(-data$x)
data$y5 <- pnorm(-data$x)
data$y6 <- 1/(1+exp(data$x))

Colors <- rainbow(ncol(data)-1)
plot(data$x, data[,2], type='l', col=Colors[1])

for(i in 3:ncol(data)){
  lines(data$x, data[,i], col=Colors[i-1])
}

library("reshape")
library("ggplot2")
# http://www.cookbook-r.com/Manipulating_data/Converting_data_between_wide_and_long_format/
data_long <- melt(data, id.vars=c("x"))
ggplot(data_long, aes(x=x, y=value, group=variable, colour=variable)) + geom_line()
Vielleicht mal anschauen und durchgehen und ausprobieren.

Dank&Gruß
Schubbiaschwilli
Eva
Beiträge: 9
Registriert: Fr Mai 20, 2022 2:14 pm

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von Eva »

Hallo,

okay nochmal das ganze: Also ich habe Datensätze für 156 Bodenzusammensetzungen. Für jede Reihe von der oben im Post gezeigten Tabelle bekomme ich eine RetCurve heraus. Dazu gehören folgende Tabelle und folgende Grafik:
RetCurve.PNG
RetCurve_Daten.PNG
Jetzt möchte ich das in R mir aber nicht 156 separate Grafiken ausgibt, sondern die 156 RetCurves in einer Abbildung darstellt.
Ob ich das mit ggplot programmiere, oder mit dem plot befehl ist mir eigentlich egal.
Mein Problem mit gglot ist aktuell, dass ich nicht weiß wie ich die unterschiedlichen RetCurves "anspreche", mir wird rechts im working space immer nur die erste RetCurve angezeigt und ich weiß nicht wie ich sie z.B. bei der for-Schleife aghängig von i machen kann. Ich denke, dass es generell wichtig für mich ist die einzelenen RetCurves anzuspeichern.

Ich hoffe man versteht es diesmal besser?
schubbiaschwilli
Beiträge: 253
Registriert: Di Jun 27, 2017 12:09 pm

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von schubbiaschwilli »

Gude!

Hast du dir mal mein Beispiel angeschaut? Falls ja: Ist es so, dass in dem von dir veröffentlichten Screenshot die Spalte 'pF' deine x-Achse ist, und die Spalten 'h', 'TH', 'THc' und 'THnc' deine y-Werte enthalten? Wenn ja, wären dies in meinem Beispiel dann die Spalten y1-y6 - Und damit eine Möglichkeit, dies umzusetzen.

Dank&Gruß
Schubbiaschwilli
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von bigben »

Hallo Eva,
Eva hat geschrieben: So Mai 22, 2022 1:45 pmFür jede Reihe von der oben im Post gezeigten Tabelle bekomme ich eine RetCurve heraus.
Ok, dass heißt, die oben gezeigte Tabelle ist für die Fragestellung hier im Forum gar nicht relevant? "Ich bekomme die Kurve heraus" bedeutet das, dass Du da jedes Mal neu Werte berechnest oder hast Du irgendwo 156 Tabellen herumliegen? Haben diese 156 Tabellen jede einen Namen oder ist das eine Liste mit Tabellen oder wo kommen diese Kurvenwerte die Dir rechts im Environment angezeigt werden jeweils her?
Ob ich das mit ggplot programmiere, oder mit dem plot befehl ist mir eigentlich egal.
Uns ist das auch egal - schubbiaschwilli hat Dir ja für beide Systeme gezeigt, wie man das grundsätzlich macht, wenn die Daten geeignet vorliegen.
Ich denke, dass es generell wichtig für mich ist die einzelenen RetCurves anzuspeichern.
Wie hast Du das denn bisher mit den Einzeldiagrammen gemacht?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Eva
Beiträge: 9
Registriert: Fr Mai 20, 2022 2:14 pm

Re: Mehrere Grafiken in einer Abbildung darstellen (ggplot)

Beitrag von Eva »

Hallo,

gut nochmal langsam das ganze. In meinem RSkript ist bereits eine Funktion vorprogrammiert. In diese gebe ich eine Tabelle mit Daten ein. Aus dieser bekomme ich eine Tabelle mit Daten heraus: ( Siehe Tabelle Post 2 von mir)

Anhand dieser Daten wird die RetCurve für jede Spalte berechnet. Das heißt ich bekomme für jede Zeile (156) oben in der Tabelle so eine Tabelle (PredOut) heraus:
RetCurve_Daten.PNG
Aus dieser Tabelle möchte ich nun nur pF und TH in einem Grafen darstellen. Das funktioniert auch gut, wenn ich nur eine Kurve in einer Abbildung darstelle ( siehe meinen ersten Post, wo ich meine for-Schleife gezeigt habe)

Mein Problem ist jetzt, wenn ich mit den PredOut Daten die RetCurves berechne, dann werden mit alle Daten zu den 156 RetCurves ausgegeben, aber ich kann nicht auf die einzelnen zugreifen, sodass ich y1,y2,y3,.. definieren kann. Ich weiß also nicht, wie ich die einzelnen RetCurves ansprechen soll, dass ich R "sagen kann" welche Daten mir auf der y-Achse ausgegeben werden sollen.
Hier in dem R-Skrpit spreche ich schon vorher die Zeile in PredOut an, die mir R ausgeben soll. Das kann ich in der von mir bereits programmierten for-Schleife nicht. Bzw. wäre sonst meine Frage wie ich eine for- Schleife so programmieren kann, dass sie die einzelnen Zeilen nummeriert durchgeht und mir dann zugeordnet die RetCurves anzeigt
bsp.PNG
bsp.PNG (7.54 KiB) 1548 mal betrachtet
Versteht man das Problem jetzt besser? Ich weiß übers Internet ist eine fremde Aufgabe immer etwas kompliziert zu erklären..

Vielen Dank! :)
Antworten