2014-02-18 4 views
1

Как нормализовать гистограмму группы ggplot для каждой группы?ggplot нормализует групповую гистограмму по группе

Пример:

library(data.table) 
library(ggplot2) 

# Test data. 
test <- data.table(id=1:100, cat=c(rep(c("A", "B", "A", "A", "B"), 20)) 
       , grp=paste0("G", c(rep(1:2,50)))) 
test[, catGrp := paste0(cat, grp)] 

# Normalized histogram of cat by grp. 
# It is normalized over all grp. 
# I want it normalized by grp. 
ggplot(test, aes(x=cat, group=grp, fill=grp)) 
    + geom_histogram(aes(y=..count../sum(..count..)), position=position_dodge()) 

Результат я получаю:

Я хотел бы получить такую ​​же гистограмму, как этот, но с суммы для каждой группы = 1 - или уровень будет 0,6 & 0,4 вместо 0,3 & 0,2.

Что такое самый простой способ достичь? Благодарю.

ответ

1
tab <- as.data.frame(prop.table(table(test$cat, test$grp), 2)) 
ggplot(tab, aes(y = Freq, x = Var1, fill = Var2)) + 
     geom_bar(stat = "identity", position = position_dodge()) 
Смежные вопросы