2012-06-04 11 views
6

Ich möchte eine Handlung wie diese, außer dass jede Facette zu 100% summiert. Gerade jetzt ist die Gruppe M 0,05 + 0,25 = 0,30 anstelle von 0,20 + 0,80 = 1,00.ggplot: relative Häufigkeiten von zwei Gruppen

df <- rbind(
    data.frame(gender=c(rep('M',5)), outcome=c(rep('1',4),'0')), 
    data.frame(gender=c(rep('F',10)), outcome=c(rep('1',7),rep('0',3))) 
) 

df 

ggplot(df, aes(outcome)) + 
    geom_bar(aes(y = (..count..)/sum(..count..))) + 
    facet_wrap(~gender, nrow=2, ncol=1) 

(Mit y = ..density .. gibt schlechtere Ergebnisse.)

+0

Die Antworten hier angegeben sind die richtige Methode. Die Methode ..density .. in vielen anderen Antworten zur Verfügung gestellt, http://stackoverflow.com/questions/10064080/plot-relative-frequencies-with-dodged-bar-plots-in-ggplot2, http: // stackoverflow. com/questions/17368223/ggplot2-multi-gruppe-histogramm-mit-in-gruppe-proportionen-eher-als-frequenz, http://stackoverflow.com/questions/3695497/ggplot-showing-inst-of-counts- In-Charts-of-categorical-Variablen liefert Werte, die in unterschiedlichem Maße falsch sind. – russellpierce

Antwort

9

ich dies in der Regel tun, indem Sie einfach Vorberechnung die Werte außerhalb von ggplot2 und mit stat = "identity":

df1 <- melt(ddply(df,.(gender),function(x){prop.table(table(x$outcome))}),id.vars = 1) 

ggplot(df1, aes(x = variable,y = value)) + 
    facet_wrap(~gender, nrow=2, ncol=1) + 
    geom_bar(stat = "identity") 
+0

Das ist richtig. Ich hoffe auf eine einfachere Antwort für eine relativ übliche Art von Chart. :) – Andrew

+0

@andrew - Ich mache das * viel *. Es ist relativ einfach, ein eigenes 'Geom' zu erstellen, und dies wäre eine großartige Ergänzung zu den eingebauten Tools für ggplot2. – Chase

+0

@Chase Ich könnte mich irren, aber ich denke, es würde mehr als ein neues Geom brauchen, weil (ich denke) Ästhetik auf Variablen abgebildet sind, bevor die Facettierung durchgeführt wird. Also denke ich, dass dies ein Design-Feature sein könnte, das dem Geom vorgelagert ist. – joran

16

Hier ist ein anderer Weg

+1

Was für ein entzückender Hack! – joran

+0

Ich mag, wie das ist kurz, aber wenn ich versuche, von Facette zu Position = ausweichen, die Summe Summe zu 100% über alle Gruppen (statt innerhalb von Gruppen) – Andrew

+0

Ich wünschte, ich könnte mehr upvote. – Eduardo

Verwandte Themen