2016-05-03 13 views
-1

Wie würde ich ein Balkendiagramm zeichnen den Prozentsatz innerhalb der Geschlechter für jede der verschiedenen Ebenen der varggplot Schmelzen und Plotten von Balkendiagramm

zeigt Die Daten können wie folgt aufgebaut sein:

structure(list(var = structure(c(5L, 5L, 5L, 6L, 5L, 4L, 5L, 
6L, 6L, 6L, 5L, 5L, 5L, 6L, 6L, 5L, 6L, 5L, 6L, 5L), .Label = c("-97:\nMultiple\nResponse", 
"-99:\nRefused", "1:\nDefinitely", "2:\nProbably", "3:\nProbably\nnot", 
"4:\nDefinitely\nnot"), class = "factor"), GENDER = structure(c(1L, 
2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 
1L, 2L, 1L), .Label = c("1: Male", "2: Female", "3: Unknown"), class = "factor")), .Names = c("var", 
"GENDER"), row.names = c(NA, 20L), class = "data.frame") 

I wollen die Bars innerhalb gender zu jedem addieren bis zu 100%

Antwort

1

Fassen Sie die Daten zusammen, um Prozent durch GENDER innerhalb jedes Niveaus von Var zu erhalten. Im Folgenden verwende ich dplyr, um dies innerhalb des Aufrufs des ggplot zu tun.

library(dplyr) 
library(scales) 

ggplot(dat %>% group_by(var, GENDER) %>% 
     tally %>% 
     mutate(pct=n/sum(n)), aes(var, pct, fill=GENDER)) + 
    geom_bar(stat="identity") + 
    scale_y_continuous(labels=percent_format()) 

enter image description here

UPDATE: Um sicherzustellen, leere Kategorien enthalten sind: Ich habe Ihren Datenrahmen dat genannt

ggplot(dat %>% group_by(var, GENDER) %>% 
     tally %>% 
     mutate(pct=n/sum(n))) + 
    geom_bar(stat="identity", aes(var, pct, fill=GENDER)) + 
    scale_y_continuous(labels=percent_format()) + 
    scale_x_discrete(drop=FALSE) 
+0

recht gut Das funktioniert nicht. Die erste Ebene fehlt und jede Antwortkategorie addiert sich zu 100%. – vashts85

+0

Einige der Ebenen fehlen, weil sie in den von Ihnen bereitgestellten Daten nicht enthalten sind. In Bezug auf die Bars, die zu 100% summierten, schien es, als ob Ihre Frage danach gefragt hätte, dass die Bars für jeden Wert von var 100% ergeben würden. Wenn ich falsch interpretiert habe, erläutern Sie bitte, wie die Daten gruppiert werden sollen. – eipi10

+0

Eigentlich funktioniert Ihr Workflow wirklich gut, es hat nur eine Minute gedauert. Wie würde ich die Reihenfolge ein wenig ändern, so dass alle Werte von 'var' angezeigt werden? Hier ist, was ich versucht, aber es lässt einige der Werte von 'var', die nicht vorhanden sind: ggplot (dat%>% group_by (Geschlecht, var)%>% tally%>% mutieren (pct = n/Summe (n)), aes (GENDER, pct, fill = var)) + geom_bar (stat = "Identität", position = "Ausweichen") + scale_y_continuous (Etiketten = Prozent_format()) + scale_x_discrete (drop = FALSCH) – vashts85

Verwandte Themen