2015-05-14 89 views
3

我想繪製一個ggplot with facet_wrap,它不會顯示實際的表格百分比,而是顯示每個組中給定答案的百分比。我必須這樣做,因爲我想表明,哪個答案是最有選擇性的,對每個組最重要。這些組的尺寸不一樣。如何使用facet_wrap繪製ggplot2,顯示每個組的百分比,而不是總體百分比?

示例數據:

group <- c(rep(c("Group1"), times = 10),rep(c("Group2"), times = 6),rep(c("Group3"), times = 4)) 
choice <- c(rep(c("a","b","c"),length.out = 10), "a","a","a","a","b","c","b","b","b","c") 
df <- data.frame(cbind(group,choice)) 

這將是很好,如果我不能用整體prop.t,但prop.c在我的情節來展示,因爲它表明的是重要的,例如該組的66.67% 2更喜歡選擇a。

library(gmodels) 
CrossTable(choice, group, prop.chisq=FALSE, prop.t = TRUE, prop.c = TRUE, prop.r = FALSE, format = "SPSS") 

這是劇情:

library(ggplot2) 
g <- ggplot(df, aes_string(x="group", fill="group")) + 
      geom_bar(aes(y = (..count..)/sum(..count..)))+ 
      ylab("percent") 
g + facet_wrap(~ choice) 

This is how it looks so far

現在第一條顯示:20%,20%,0%,而應該表現出40%,66.67%和0 %(組中每個人的百分比,誰給出了這個答案)。

第二欄應顯示:30%,16.667%和75%。

和第三條:30%,16.667%和25%

謝謝您的幫助。

+0

另請參閱:http://stackoverflow.com/q/11026016/892313 –

回答

9

它可能會更好事先計算出百分比:

library(dplyr) 
dfl <- df %>% 
    group_by(group,choice) %>% 
    summarise(n=n()) %>% 
    group_by(group) %>% 
    mutate(perc=100*n/sum(n)) 

ggplot(dfl, aes(x=group, y=perc, fill=group)) + 
    geom_bar(stat="identity") + 
    ylab("percent") + 
    facet_wrap(~ choice) 

這給: enter image description here


另一個(可能更好)呈現數據的方式是通過組使用方面:

ggplot(dfl, aes(x=choice, y=perc, fill=choice)) + 
    geom_bar(stat="identity") + 
    ylab("percent") + 
    facet_wrap(~ group) 

這給出: enter image description here