Hinzufügen von "leerer" Datenreihe im Histogram

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Antworten
MJ95
Beiträge: 10
Registriert: Fr Apr 12, 2019 3:12 pm

Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag 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
Pilot_Sonntagsfrage.png (4.72 KiB) 617 mal betrachtet
Vielen Dank für eure Hilfe!
Martin
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag 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
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag von EDi »

Code: Alles auswählen

  scale_x_discrete(drop = FALSE)
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)
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.
MJ95
Beiträge: 10
Registriert: Fr Apr 12, 2019 3:12 pm

Re: Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag 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
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag 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")
Dateianhänge
leere Zeile in Histogramm.png
leere Zeile in Histogramm.png (6.5 KiB) 578 mal betrachtet
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag 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:

Code: Alles auswählen

test2["AfD"] <- 0
Gruß, Jörg
MJ95
Beiträge: 10
Registriert: Fr Apr 12, 2019 3:12 pm

Re: Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag 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:

Code: Alles auswählen

test2["AfD"] <- 0
Gruß, Jörg
Naja, die Daten lagen halt als Int vor. Und ohne Umwandlung hats leider nicht geklappt :D
Hufeisen
Beiträge: 162
Registriert: Fr Aug 31, 2018 6:34 pm

Re: Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag 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:

Code: Alles auswählen

test2["AfD"] <- 0
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. :roll:
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Hinzufügen von "leerer" Datenreihe im Histogram

Beitrag 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
Antworten