Kategoriale Daten ineinanderschachteln beim Boxplot

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

farngarten
Beiträge: 76
Registriert: Fr Dez 08, 2017 6:42 am

Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von farngarten » Di Sep 24, 2019 7:46 am

Hallo,
kann man kategoriale Daten ineinanderschachteln beim Boxplot?
Religionen auf der x Achse, und dann nochmal unterteilt in Geschlecht.
y Achse Anzahl lockerer Freunde.
Ich würde gern pro Religion zwei Boxplots (Männer blau Frauen rosa) dicht nebeneinander haben, so dass die unterschiedliche Freundesanzahl , die Männer u Frauen haben, deutlich wird.
Geht das?

Mein Datensatz heisst nur k
v_309 ist Religion, hab ich faktorisiert und als k$reli gespeichert
v_313 sind die Anzahl der Freunde
in der Zeile stat_boxplot ist mir nicht klar, was bei y reinkommt

mein kläglicher Versuch sieht so aus:

boxplot <- ggplot(k, aes(x = k$reli, y = v_313, fill = k$reli)) + #fill = unterschiedliche Farben pro religion#
ggtitle("blabla") + #Titel hinzufügen#
theme(text = element_text(size = 12)) + #Schriftgröße aller Textelemente#
scale_y_continuous(name = "Anzahl Freunde") + #Titel Y-Achse#
scale_x_discrete(name = "Religion") + #Titel X-Achse#
guides(fill=FALSE) + #Legende ausschalten#
scale_fill_manual(values = c("lightred", "blue" )) + #Manuell Farben einstellen#
stat_boxplot(geom ='errorbar', width = 0.2, y = ) + #Horizontale Linien für Whiskers#
geom_boxplot() + #Erstelle ein Boxplot-Diagramm#
stat_summary(fun.y=mean, geom="point", color="red", size = 3) #Mittelwert als roten Punkt einblenden#
boxplot

vielen Dank für Eure Hilfe. Grüße Martin

bigben
Beiträge: 1126
Registriert: Mi Okt 12, 2016 9:09 am

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von bigben » Di Sep 24, 2019 8:10 am

Meinst Du so etwas wie hier: http://www.sthda.com/english/wiki/ggplot2-box-plot-quick-start-guide-r-software-and-data-visualization#box-plot-with-multiple-groups
Oder such doch mal nach der Überschrift "Multiple ggplot Boxplot in R" auf dieser Seite https://www.tutorialgateway.org/r-ggplot2-boxplot/
oder hier: https://cmdlinetips.com/2019/02/how-to-make-grouped-boxplots-with-ggplot2/

Hilft das?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

farngarten
Beiträge: 76
Registriert: Fr Dez 08, 2017 6:42 am

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von farngarten » Di Sep 24, 2019 3:30 pm

Hallo Bernhard, der erste Link lässt sich nicht aufrufen.
Ich hab kurz gezeichnet, was ich meine. Siehe Bild.

viele Grüße Martin
Dateianhänge
demo.png
demo.png (5.23 KiB) 142 mal betrachtet

bigben
Beiträge: 1126
Registriert: Mi Okt 12, 2016 9:09 am

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von bigben » Di Sep 24, 2019 3:50 pm

Tatsächlich, einer meiner drei Links hatte einen Tippfehler? Und die anderen beiden beantworten die Frage nicht? Auch nicht folgender Satz
https://cmdlinetips.com/2019/02/how-to-make-grouped-boxplots-with-ggplot2/ hat geschrieben:The key idea to make a grouped boxplot is to use fill argument inside ggplot’s aesthetics.
Nimm das Geschlecht ins aes(...) als Farbe für den Boxplot auf, dann wird das schon:

Code: Alles auswählen

aes(x = religion, y = whatever, fill = gender)
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

farngarten
Beiträge: 76
Registriert: Fr Dez 08, 2017 6:42 am

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von farngarten » Di Sep 24, 2019 5:15 pm

also tut mir leid, ich kriegs nicht hin.



boxplot <- ggplot(k, aes(x = k$reli, y = k$v_313, fill = k$sex)) + #fill = unterschiedliche Farben pro geschlecht#
ggtitle("blabla") + #Titel hinzufügen#
theme(text = element_text(size = 12)) + #Schriftgröße aller Textelemente#
scale_y_continuous(name = "Anzahl Freunde") + #Titel Y-Achse#
scale_x_discrete(name = "Religion") + #Titel X-Achse#
guides(fill=FALSE) + #Legende ausschalten#
scale_fill_manual(values = c("lightred", "blue" )) + #Manuell Farben einstellen#
stat_boxplot(geom ='errorbar', width = 0.2, y = ) + #Horizontale Linien für Whiskers#
geom_boxplot() + #Erstelle ein Boxplot-Diagramm#
stat_summary(fun.y=mean, geom="point", color="red", size = 3) #Mittelwert als roten Punkt einblenden#
boxplot


und von der Seite , auf die Du hingewiesen hast:

gapminder %>%
filter(k$sex %in% c(1,2)) %>%
ggplot(aes(x=reli,y=k$v_313, fill=factor(k$sex))) +
geom_boxplot() +
labs(fill = "Geschlecht") +
geom_point(position=position_jitterdodge(),alpha=0.3) +
theme_bw(base_size = 16)


Error: Result must have length 1704, not 172.
Ich habe 172 Probanden. wie kommt es zu der Zahl 1702????

Hufeisen
Beiträge: 131
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von Hufeisen » Mi Sep 25, 2019 1:08 pm

Mir fällt es schwer einen roten Faden in deinem Code zu sehen, da ich mit dem tidyverse nicht gut vertraut bin. Formal würde die Darstellung in Code-Tags helfen. Inhaltlich bestehen aber größerer Probleme. Was tust du da gerade?

Code: Alles auswählen

gapminder %>% 
  filter(k$sex %in% c(1,2)) %>%
  ggplot(aes(x=reli,y=k$v_313, fill=factor(k$sex))) +
  geom_boxplot() + 
  labs(fill = "Geschlecht") + 
  geom_point(position=position_jitterdodge(),alpha=0.3) +
  theme_bw(base_size = 16)
Ein Datensatz namens gapminder wird aufgerufen und dann mit dem Datensatz k weitergearbeitet? Vielleicht fangen wir besser noch einmal von vorne an und die gibst uns Beispieldaten und/oder einen Einblick in deine Daten mit str(k) an die Hand.

bigben
Beiträge: 1126
Registriert: Mi Okt 12, 2016 9:09 am

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von bigben » Mi Sep 25, 2019 1:37 pm

farngarten hat geschrieben:
Di Sep 24, 2019 5:15 pm
also tut mir leid, ich kriegs nicht hin.
Tut mir auch leid. Leid-Tun hilft aber gerade gar nicht. Ein minimales, reproduzierbares, vollständiges Beispiel würde helfen.
boxplot <- ggplot(k, aes(x = k$reli, y = k$v_313, fill = k$sex)) + #fill = unterschiedliche Farben pro geschlecht#
ggtitle("blabla") + #Titel hinzufügen#
theme(text = element_text(size = 12)) + #Schriftgröße aller Textelemente#
scale_y_continuous(name = "Anzahl Freunde") + #Titel Y-Achse#
scale_x_discrete(name = "Religion") + #Titel X-Achse#
guides(fill=FALSE) + #Legende ausschalten#
scale_fill_manual(values = c("lightred", "blue" )) + #Manuell Farben einstellen#
stat_boxplot(geom ='errorbar', width = 0.2, y = ) + #Horizontale Linien für Whiskers#
geom_boxplot() + #Erstelle ein Boxplot-Diagramm#
stat_summary(fun.y=mean, geom="point", color="red", size = 3) #Mittelwert als roten Punkt einblenden#
boxplot
Das sind jetzt 11 Zeilen Code die sich überwiegend mit lauter Sachen beschäftigen, die unabhängig von der Gruppierung sind und die Augen vom Wesentlichen ablenken. boxplot ist der Name einer Funktion in R, da ist es nicht schlau, den gleichen Namen auch noch für eine Grafik zu wählen. Dann tauchen in Deinen Aufrufen von ggplot die einzelnen Spalten mal als reli und mal als k$reli auf. Ersteres ist in ggplot2 richtig, ob letzteres den Fehler verursacht kann ich auf diesem Rechner gerade nicht prüfen. Warum gibt es einmal k$sex und einmal factor(k$sex)? Ist sex denn jetzt ein Faktor in Deinen Daten oder nicht?

Wie gesagt: Mit einem minimalen, reproduzierbaren, vollständigen Beispiel kämen wir vorran. Hier steht, wie man das macht: https://stackoverflow.com/help/minimal-reproducible-example

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Athomas
Beiträge: 289
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von Athomas » Mi Sep 25, 2019 2:36 pm

bigben hat geschrieben:
Mi Sep 25, 2019 1:37 pm
Wie gesagt: Mit einem minimalen, reproduzierbaren, vollständigen Beispiel kämen wir vorran.
Diese Bitte einen Tag früher hätte Dir (uns) das bisherige Zeug erspart :D !
Hufeisen hat geschrieben:
Mi Sep 25, 2019 1:08 pm
... da ich mit dem tidyverse nicht gut vertraut bin.
+1 wegen vermuteter tidyverse-Skepsis!

farngarten
Beiträge: 76
Registriert: Fr Dez 08, 2017 6:42 am

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von farngarten » Do Sep 26, 2019 12:34 pm

Hallo ,
es tut mir leid, dass meine Frage zu einem Antwort-Monster ausartet.
Das Problem ist dass wir auf unterschiedlichen Niveaus kommunizieren. Ich kann euren Antworten teilweise nicht folgen, weil ich nicht die Fachkenntnis habe, wie ihr. (z.B. hab ich %<% noch nie gesehen) Ganz zu schweigen von den Fehlermeldungen (Error: Result must have length 1704, not 172. ) die ich nicht verstehe.
Die Codes hab ich von Tutorial kopiert und versucht meine Variablen reinzusetzen.

Ich kann euch sagen R ist ein hartes Brot am Anfang. Ich bleib am Ball.
Gruß und Danke Martin

bigben
Beiträge: 1126
Registriert: Mi Okt 12, 2016 9:09 am

Re: Kategoriale Daten ineinanderschachteln beim Boxplot

Beitrag von bigben » Do Sep 26, 2019 1:30 pm

Hallo farngarten,

glaub mir, es ist uns allen klar, dass R am Anfang hartes Brot ist und dass Du ausgerechnet ggplot2 mit seiner eingängigen Dokumentation verwenden willst, macht die Sache nicht leichter. Dessen sind wir uns sehr wohl bewusst. Auf welcher Ebene wir kommunizieren kannst aber nur Du beeinflussen, wenn Du uns sagst, auf welche Ebene wir müssen. Du hast mit Deinem eigenen Versuch eröffnet, der sehr komplexe Dinge enthält und deshalb gehen wir in der Antwort davon aus, dass Du genügend Grundlagen hast, um so weit selbst zu kommen. Wenn das nicht so ist, wenn das alles nur zusammenkopiert ist, dann lenkt uns das auf ein falsches Niveau.

Ich habe Dir mit Links zu drei Beispielen helfen wollen. Der mittlere von den drei Links funktioniert und er verwendet nicht das Dir noch unbekannte Zeichen %>%. Stattdessen steht dort ganz schlicht

Code: Alles auswählen

# Multiple R ggplot boxplot

# Importing the ggplot2 library
library(ggplot2)

# Create a Boxplot Importing
ggplot(diamonds, aes(x = cut, y = price, fill = clarity)) + 
  geom_boxplot()
Statt das zu analysieren schreibst Du hier über den Link, der vorübergehend nicht gefunzt hat und über den, dessen Syntax Du noch nicht verstehst.

In Deinem dritten Post schreibst Du zwei nicht-funktionierende Code-Blöcke, zum ersten schreibst Du gar nicht dazu, warum das nicht funktioniert hat, der zweite ist Zufallscoding: In nicht-verstandenem Code einfach mal ein paar Variablennamen verändert. So wird es nicht funktionieren.

Erstell bitte ein minimales reproduzierbares komplettes Beispiel wie von mir verlinkt und sag dazu, dass der scheinbar von Dir geschriebene Code im Eingangsposting in Wirklichkeit weit über Dein bisheriges Verständnis hinaus geht und Du wirst sehen, dass Dich dieses Forum so schnell nicht hängen lässt.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte

Antworten