Mittelwerte zu Boxplot verschieben

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

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

Mittelwerte zu Boxplot verschieben

Beitrag von farngarten » Do Okt 10, 2019 9:17 am

HAllo ,
wie kann ich bei einem geschachtelten Boxplot (Religion auf der x Achse nach Frauen und Männern getrennt) die Mittelwert-Punkte nach links und rechts verschieben, dass sie genau im jeweiligen Boxplot liegen? Danke und Grüße Martin

Code: Alles auswählen

ggplot(k_mw, aes(x = k_mw$v_311, y = k_mw$v_312, fill = k_mw$v_1)) + 
  stat_boxplot(geom ='errorbar') + 
  geom_boxplot() + 
  ggtitle("Enge Freunde nach Religion u Geschlecht") + 
  scale_y_continuous(name = "Enge Freunde") + 
  scale_x_discrete(name = "Religion") +
  scale_fill_manual(values = c("lightblue", "#0000ff")) + 
  geom_boxplot() + 
  stat_summary(fun.y=mean, geom="point", color="red", size = 2) #Mittelwert als roten Punkt einblenden#
Rplot02.jpeg

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

Re: Mittelwerte zu Boxplot verschieben

Beitrag von Hufeisen » Do Okt 10, 2019 5:52 pm

Die Lösung ist zum Augenrollen: In stat_summary muss man die Punkte verschieben (siehe Code). Intuitiv ist es nicht und aus der Hilfe geht es nicht hervor. Habe ich per google so gefunden.

Code: Alles auswählen

# Punkte auf x-Achse verschoben
ggplot(mtcars, aes(x = as.factor(cyl), y = qsec, fill = as.factor(am))) + 
  stat_boxplot(geom ='errorbar') + 
  geom_boxplot() + 
  ggtitle("mtcars") + 
  scale_y_continuous(name = "Viertelmeile") + 
  scale_x_discrete(name = "Zylinder") +
  scale_fill_manual(values = c("lightblue", "#0000ff")) + 
  geom_boxplot() + 
  stat_summary(fun.y=mean, geom="point", color="red", size = 2) #Mittelwert als roten Punkt einblenden#


# Punkte zentriert
ggplot(mtcars, aes(x = as.factor(cyl), y = qsec, fill = as.factor(am))) + 
  stat_boxplot(geom ='errorbar') + 
  geom_boxplot() + 
  ggtitle("mtcars") + 
  scale_y_continuous(name = "Viertelmeile") + 
  scale_x_discrete(name = "Zylinder") +
  scale_fill_manual(values = c("lightblue", "#0000ff")) + 
  geom_boxplot() + 
  stat_summary(fun.y=mean, geom="point", color="red", size = 2, position = position_dodge(width = .75)) #Mittelwert als roten Punkt einblenden#

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

Re: Mittelwerte zu Boxplot verschieben

Beitrag von farngarten » Fr Okt 11, 2019 10:46 am

ah ok, ich probier das. Wenns krickelig wird, lass ich es , Mittelwerte sind bei dieser Darstellung nicht so wichtig. wäre aber schön gewesen. Danke!

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

Re: Mittelwerte zu Boxplot verschieben

Beitrag von Hufeisen » Fr Okt 11, 2019 12:07 pm

Vielleicht wäre base R eine Alternative? Der Zahlensalat in der X-Achsenbeschriftung lässt sich leicht durch Deine Religionen ersetzen (siehe Kommentar im Code).

Code: Alles auswählen

# base R
  # Ein einfacher Boxplot
  boxplot(data = mtcars, qsec ~ am:cyl,
          col = c("lightblue", "blue"),
          xlab = "Zylinder", ylab = "Zeit auf der Viertelmeile")
          # names = c("test1", "test2", "test3", "test4", "test5", "test6") # mit dem Argument names kann deine Religion eingetragen werden
  
  # Gruppenmittelwerte
  tapply(X = mtcars$qsec, INDEX = list(mtcars$am, mtcars$cyl), FUN = mean)
  # 0        1
  # 4 20.9700 18.45000
  # 6 19.2150 16.32667
  # 8 17.1425 14.55000
  
  mean_points <- tapply(X = mtcars$qsec, INDEX = list(mtcars$am, mtcars$cyl), mean)
  
  # zum Boxplot hinzufügen
  points(x = c(1:(dim(mean_points)[1] * dim(mean_points)[2])), y = mean_points, pch = 16, cex = 1.5, col = "red") # komplizierte Berechnung der Anzahl an Punkten auf der x-Achse. Das geht bestimmt eleganter, simpel ist "x = c(1:6)".
  
  # mit Legende
  legend("top", c("automatic", "manual"),
         fill = c("lightblue", "blue"))
 
Dateianhänge
Mittelwerte in Boxplot base R.png

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

Re: Mittelwerte zu Boxplot verschieben

Beitrag von farngarten » So Okt 13, 2019 1:51 pm

ich kuck mal.

Antworten