6

我想要这样的情节,除了每个方面的总和为 100%。现在组 M 是 0.05+0.25=0.30 而不是 0.20+0.80=1.00。

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) 

(使用 y = ..density.. 会产生更差的结果。)

4

2 回答 2

17

这是另一种方式

ggplot(df, aes(outcome)) +
    geom_bar(aes(y = ..count.. / sapply(PANEL, FUN=function(x) sum(count[PANEL == x])))) +
    facet_wrap(~gender, nrow=2, ncol=1) 
于 2012-06-04T21:40:22.620 回答
9

我通常通过简单地预先计算ggplot2之外的值并使用来做到这一点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")
于 2012-06-04T20:59:19.720 回答