ggplot - Boxplots nebeneinander

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Maxx_BMT

ggplot - Boxplots nebeneinander

Beitrag von Maxx_BMT »

Hallo,

ich habe eine Frage bezüglich der ggplot Funktion.

Ich würde gern folgendes plotten:

Code: Alles auswählen

  
 head (data)
  
  Region1 Region2 Region3 Region4 Region5
1  3.6475 3.69155 3.68836 3.68751 3.68516
2  3.6475 3.69155 3.68836 3.68751 3.68516
3  3.6475 3.69155 3.68836 3.68751 3.68516
4  3.6475 3.69155 3.68836 3.68751 3.68516
5  3.6475 3.69155 3.68836 3.68751 3.68516
6  3.6475 3.69155 3.68836 3.68751 3.68516

So sehen meine Daten aus. Die Spalten haben auch eine unterschiedliche Länge (habe jetzt nur den Kopf dargestellt.). Ich würde jetzt gerne alle 5 Regionen nebeneinander als Boxplot darstellen. Ich tue mich etwas schwer damit in ggplot vielleicht kann mit hier jemand helfen.

Besten Dank.

LG
Maxx_BMT
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: ggplot - Boxplots nebeneinander

Beitrag von jogo »

Hallo Maxx,
Maxx_BMT hat geschrieben: Fr Apr 20, 2018 8:36 am So sehen meine Daten aus. Die Spalten haben auch eine unterschiedliche Länge (habe jetzt nur den Kopf dargestellt.).
was meinst Du damit? Dein Objekt data sieht doch aus wie ein Dataframe. Ein Dataframe ist eine Liste von Vektoren, die alle gleich lang sind.
Kannst Du bitte auch den Output zeigen von:

Code: Alles auswählen

str(data) ## und
summary(data)
:?:

Gruß, Jörg
Maxx_BMT

Re: ggplot - Boxplots nebeneinander

Beitrag von Maxx_BMT »

Gar kein Problem machen wir doch ;)

Danke schon mal, hab gestern mit ggplot angefangen und bin noch etwas verwirrt wegen der Zuweisung :)

Also die verschiedenen Regionen haben unterschiedlich viele Messpunkte. Das mein ich mit unterschiedlicher Länge.

Code: Alles auswählen

> str(data)

'data.frame':   19512300 obs. of  5 variables:
 $ Region1: num  3.65 3.65 3.65 3.65 3.65 ...
 $ Region2: num  3.69 3.69 3.69 3.69 3.69 ...
 $ Region3: num  3.69 3.69 3.69 3.69 3.69 ...
 $ Region4: num  3.69 3.69 3.69 3.69 3.69 ...
 $ Region5: num  3.69 3.69 3.69 3.69 3.69 ...

Code: Alles auswählen


> summary(data)
 
 
    Region1           Region2           Region3           Region4            Region5        
 Min.   :  3.647   Min.   : 4        Min.   : 4        Min.   :  4        Min.   :  4       
 1st Qu.: 53.497   1st Qu.:42        1st Qu.:40        1st Qu.: 44        1st Qu.: 58       
 Median : 69.424   Median :52        Median :51        Median : 58        Median : 74       
 Mean   : 68.295   Mean   :53        Mean   :52        Mean   : 56        Mean   : 75       
 3rd Qu.: 84.136   3rd Qu.:65        3rd Qu.:65        3rd Qu.: 68        3rd Qu.: 90       
 Max.   :124.380   Max.   :90        Max.   :90        Max.   :105        Max.   :135       
                   NA's   :6264607   NA's   :8691178   NA's   :10622074   NA's   :10217076  

LG,
Maxx_BMT
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: ggplot - Boxplots nebeneinander

Beitrag von jogo »

Du wolltest ausdrücken, dass NAs vorhanden sind, richtig?
(Deshalb sind verschieden viele Zahlenwerte je Region erfasst worden.)

Gruß, Jörg
Maxx_BMT

Re: ggplot - Boxplots nebeneinander

Beitrag von Maxx_BMT »

Ja genau das meine ich ;) Sorry!
Maxx_BMT

Re: ggplot - Boxplots nebeneinander

Beitrag von Maxx_BMT »

Habe es herausgefunden, war einfacher als gedacht :) Trotzdem danke für deine Hilfe :)
Maxx_BMT

Re: ggplot - Boxplots nebeneinander

Beitrag von Maxx_BMT »

Ich hab doch noch ein Problem.

Meine Daten sehen wie folgt aus:

Code: Alles auswählen

  
  	
  Spalte1 	Saplte2 	Spalte3 	Spalte4 	Spalte5
1 223GB  	223GB   	288KL   	288KL   	123FF
2 Region1 	Region2 	Region1 	Region2 	Region3
3  3.6475 	3.69155 	3.68836 	3.68751 	3.6851
4  3.6475 	3.69155 	3.68836 	3.68751 	3.68516	
.
.
.
Ende

Ich will jetzt mit ggplot() einfach die Daten nach der Region Plotten. Die Messwerte fangen ab der 3. Zeile an (Zeile 1 ist das Individuum, Zeile 2 die Region) und laufen bis zum Ende. Das heißt ich müsste ja jetzt irgendwie Reihe 2 als Faktor setzen, richtig? Wie mache ich das (sicher mit as.factor()?) und wie implementiere ich das in ggplot() + geom_boxplot. Sodass ich beispielsweise alle Regionen 1 nebeneinander geplottet bekomme?

Weiterhin sollen in diese Tabelle noch weitere Individuen kommen, sodass ich z.B. alle Regionen eins von verschiedenen Individuen plotten nebeneinander geplottet werden sollen usw. Wie gehe ich dabei mit 2 Faktoren um? In Matlab ist es für mich etwas einfacher als in R nachzuvollziehen da geht es, aber hier in R bekomme ich es nicht ohne weiteres hin, vielleicht kann mir da jemand helfen.

Vielen Dank:)
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: ggplot - Boxplots nebeneinander

Beitrag von EDi »

Habe es herausgefunden, war einfacher als gedacht Trotzdem danke für deine Hilfe
Kannst du uns an der Lösung teilhaben lassen?
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.
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: ggplot - Boxplots nebeneinander

Beitrag von EDi »

Zuerst solltest du die Daten aufräumen:

Ein Spalte für die erste Zeile, eine Spalte für die Region und eine Spalte für die Werte.

ggplot mag Daten im langen Format (am besten 'tidy').
Der Rest ist dann straight forward...
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.
Maxx_BMT

Re: ggplot - Boxplots nebeneinander

Beitrag von Maxx_BMT »

Hallo,

erstmal danke für eure Hilfe.

Zuerst einmal sage ich euch natürlich gern wie ich es gemacht habe: @EDi
Kannst du uns an der Lösung teilhaben lassen?
Ich bin den langen Weg gegangen und habe mir eine komplette Matrix aus meinen Daten erstellt und habe dann einzeln die einzelnen Plt mit ggplot zusammengefügt, was ungefähr so aussieht:

Code: Alles auswählen

tikz(file = "plot_test.tex", width = 5, height = 5)
plot <- ggplot(complete, aes(x="Region 1", y=Region1_223GB))
		+ geom_boxplot(coef = 6) + ggplot(complete_252AB, aes(x="Region 1", y=Region1_252AB))  
		+ geom_boxplot(coef = 6) + geom_boxplot(aes(x="Region 2", y=Region2_223GB),coef = 6) 
		+ geom_boxplot(aes(x="Region 3", y=Region3_223GB),coef = 6) 
		+ geom_boxplot(aes(x="Region 4", y=Region4_223GB),coef = 6) 
		+ geom_boxplot(aes(x="Region 5", y=Region5_223GB),coef = 6) 
		+ ggtitle("Dicke des PDL Spaltes 223GB") 
		+ ylab("Dicke in um") + xlab ("Regionen") + theme_bw()

print(plot)
dev.off()
Das ist nur eine Vorversion, für eine Probematrix aber enstsprechend kann ich das mit meiner kompletten Messmatrix dann erweitern. Das heißt so viel, dass ich für jeden neuen Plot einen neuen geom_boxplot erstelle und so meine Grafik entsprechend erweitern kann. Ich hab natürlich auch schon an eine Schleife gedacht, aber hier kann ich etwas individueller mit der Beschriftung umgehen und am Ende ist es auch für diesen einen Plot schnell gemacht.
Die tikz Sache nutze ich nur für die Erstellung von .tex Dateien als Grafik für Latex.

Jetzt zum zweiten Problem, dass mit der Spalte habe ich mir auch schon gedacht. Am Ende würde das ja nur bedeuten, dass ich das ganze dann transponiere, was bedeuten würde, dass ich eine unglaubliche Menge an Spalten habe, was ich gern vermeiden wollte, weil für die Kontrolle ist es in der jetzigen Form etwas einfacher. Gibt es nicht einfach die Möglichkeit die Abfrage zu ändern, sodass man statt Spalten definiert einfach die Zeilen definiert und diese ebenso wie die Spalten anwählen kann?


Dankeschön :)

LG
Maxx_BMT

Nachtrag:

Ich habe jetzt meine Daten umsortiert, sodass ich alles spaltenweise definieren kann, ich muss zugeben, dass dies sehr unelegant ist. Warum kann ich nicht Zeilen als Faktoren nutzen?

Statt meine üblichen Schreibweise mit einem Header und dann den enstrechenden Namen muss ich nun unglaublich viele Zeilen erstellen mit Namen und Regionen und dann erst die Messwerte dazu, damit er es mir gruppieren kann.

Bin ich einfach etwas unbegabt es so zu programmieren oder ist es von R so gewollt?

Antworten