6

各ファセットの合計が 100% になることを除いて、このようなプロットが必要です。現在、グループ M は 0.20+0.80=1.00 ではなく 0.05+0.25=0.30 です。

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 に答える