Seite 1 von 1
Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Do Aug 01, 2019 12:44 pm
von MJ95
Hey ihr Lieben,
ich bin grade an der Auswertung einer Studie und stehe vor folgendem Problem:
Ich möchte die im Stile einer "Sonntagsfrage" angegebene Parteipräferenz gerne als Histogramm darstellen. Allerdings wurde aufgrund der Zusammensetzung der Stichprobe die Option "AfD" von keiner Person ausgewählt. Trotzdem möchte ich einen Balken mit der Höhe 0 im Histogram erscheinen lassen. Grundlegend hab ich folgenden Befehl genutzt:
Code: Alles auswählen
ggplot(D, aes(x=PE03)) +
labs(x="»Welche Partei würden Sie wählen, wenn am nächsten Sonntag Bundestagswahl wäre?«",y="")+
geom_histogram(stat="count",color="black")
PE03 ist eine Variable aus dem Datensatz D, in welcher die ausgewählte Partei als Faktor vorliegt. Mögliche Ausprägungen des Faktors sind:
CDU;SPD;Grüne;Linke;FDP;AfD;Sonstige;gar nicht/ungültig
Dabei kommt dann folgendes raus:

- Pilot_Sonntagsfrage.png (4.72 KiB) 2236 mal betrachtet
Vielen Dank für eure Hilfe!
Martin
Re: Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Do Aug 01, 2019 1:01 pm
von jogo
Hallo Martin,
wenn es wirklich als Faktor kodiert ist, dürfte es kein Problem sein:
Code: Alles auswählen
I <- subset(iris, Species!="versicolor")
barplot(table(I$Species))
Gruß, Jörg
Re: Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Do Aug 01, 2019 11:06 pm
von EDi
sollte hier Abhilfe schaffen... O
Oder die Counts vorher berechnen (bin kein Freund davon, ggplot das aggregieren zu überlassen) und geom_bar() nutzen...
Code: Alles auswählen
library(ggplot2)
df1 <- data.frame(fac = sample(c("a", "b", "c"), 100, replace = TRUE))
ggplot(df1, aes(x = fac)) +
geom_histogram(stat = "count",color = "black")
df1$fac <- factor(df1$fac, levels = c("a", "b", "c", "d"))
ggplot(df1, aes(x = fac)) +
geom_histogram(stat = "count",color = "black")
ggplot(df1, aes(x = fac)) +
geom_histogram(stat = "count",color = "black") +
scale_x_discrete(drop = FALSE)
Re: Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Fr Aug 02, 2019 6:49 pm
von MJ95
jogo hat geschrieben: Do Aug 01, 2019 1:01 pm
Hallo Martin,
wenn es wirklich als Faktor kodiert ist, dürfte es kein Problem sein:
Code: Alles auswählen
I <- subset(iris, Species!="versicolor")
barplot(table(I$Species))
Gruß, Jörg
Funktioniert leider nicht.
Die Daten lagen ursprünglich als Integer mit den Werten 1-8 je nach Ausprägung vor. Ich hab es dann folgendermaßen umkodiert:
Code: Alles auswählen
D$PE03<-as.factor(D$PE03)
D$PE03<-recode_factor(D$PE03,'1'="CDU",'2'="SPD",'3'="Grüne",'4'="Linke",'5'="AfD",'6'="FDP",'7'="Sonstige",'8'="gar nicht/ungültig")
Schau ich mir das ganze dann an, sieht es so aus:
Code: Alles auswählen
> str(D$PE03)
Factor w/ 7 levels "CDU","SPD","Grüne",..: 3 2 4 3 3 6 3 1 3 3 ...
Es scheint also, dass der Faktor "AfD" gar nicht gespeichert wurde, da die Ausprägung 5 im ursprünglichen Datensatz nicht vorkommt.
Kann ich dann irgendwie dafür sorgen, dass sie trotzdem angezeigt wird? Könnte es natürlich auch auslesen und dann manuell nen Hsitogramm machen, das ist aber bei >10 Histogrammen die eher unschöne Variante.
Viele Grüße
Martin
Re: Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Fr Aug 02, 2019 7:42 pm
von Hufeisen
Hallo,
ich bin kurz angebunden und habe den Thread nur überflogen. Verzeih bitte, wenn meine Antwort dir nicht weiter hilft. Aber mit einer Datenaggregation vorher sollte es gehen.
Code: Alles auswählen
# Beispieldaten erzeugen
test <- sample(c("Grüne", "Linke", "CDU", "SPD", "FDP"), 100, replace = TRUE)
# Output mit table()
# table(test)
# test
# CDU FDP Grüne Linke SPD
# 18 17 24 21 20
test2 <- table(test)
test2$AfD <-0 # wird dabei in eine Liste umgewandelt
test2 <- unlist(test2)
# Output
# test2
# CDU FDP Grüne Linke SPD AfD
# 18 17 24 21 20 0
# data.frame erzeugen
test_data <- data.frame(Stimmen = test2, Partei = names(test2))
ggplot(data = test_data) + geom_bar(aes(x = Partei, y = Stimmen), stat = "identity")
Re: Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Fr Aug 02, 2019 8:25 pm
von jogo
Hallo Martin,
Du weißt aber schon, dass
'1' kein integer ist, oder?
Die Grafik sieht doch jetzt einigermaßen ok aus, oder?
Du hättest es wahrscheinlich auch ohne Umwandlung in eine Liste probieren können:
Gruß, Jörg
Re: Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Sa Aug 03, 2019 10:46 am
von MJ95
Hufeisen hat geschrieben: Fr Aug 02, 2019 7:42 pm
Hallo,
ich bin kurz angebunden und habe den Thread nur überflogen. Verzeih bitte, wenn meine Antwort dir nicht weiter hilft. Aber mit einer Datenaggregation vorher sollte es gehen.
Code: Alles auswählen
# Beispieldaten erzeugen
test <- sample(c("Grüne", "Linke", "CDU", "SPD", "FDP"), 100, replace = TRUE)
# Output mit table()
# table(test)
# test
# CDU FDP Grüne Linke SPD
# 18 17 24 21 20
test2 <- table(test)
test2$AfD <-0 # wird dabei in eine Liste umgewandelt
test2 <- unlist(test2)
# Output
# test2
# CDU FDP Grüne Linke SPD AfD
# 18 17 24 21 20 0
# data.frame erzeugen
test_data <- data.frame(Stimmen = test2, Partei = names(test2))
ggplot(data = test_data) + geom_bar(aes(x = Partei, y = Stimmen), stat = "identity")
Jup, das hat geholfen, danke! Ist zwar nen bisschen Aufwand, klappt aber perfekt!
jogo hat geschrieben: Fr Aug 02, 2019 8:25 pm
Hallo Martin,
Du weißt aber schon, dass
'1' kein integer ist, oder?
Die Grafik sieht doch jetzt einigermaßen ok aus, oder?
Du hättest es wahrscheinlich auch ohne Umwandlung in eine Liste probieren können:
Gruß, Jörg
Naja, die Daten lagen halt als Int vor. Und ohne Umwandlung hats leider nicht geklappt

Re: Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Sa Aug 03, 2019 4:48 pm
von Hufeisen
jogo hat geschrieben: Fr Aug 02, 2019 8:25 pm
Du hättest es wahrscheinlich auch ohne Umwandlung in eine Liste probieren können:
Ich fühle mich auch angesprochen: Danke für den Hinweis, deine Methode des subsetting ist natürlich die richtige. Das habe ich gestern so hingeschludert.

Re: Hinzufügen von "leerer" Datenreihe im Histogram
Verfasst: Mo Aug 05, 2019 10:35 am
von jogo
Ich habe da mal was vorbereitet:
Code: Alles auswählen
B <- BOD
set.seed(42)
B$Gruppe <- sample(1:6)
B$F <- factor(B$Gruppe, levels=1:7, labels = paste0("Gr", 1:7))
B
B$F
Gruß, Jörg