これがファセットのない解決策です。まず、データフレームを作成します。1から20までの値を使用して、どの値も負にならないようにしました(人口ピラミッドでは、負のカウント/年齢を取得しません)。
test <- data.frame(v=sample(1:20,1000,replace=T), g=c('M','F'))
次に、値geom_bar()
ごとに2つの呼び出しを個別に組み合わせg
ます。カウントの場合F
はそのまま計算されますが、M
カウントの場合は-1を掛けて、反対方向のバーを取得します。次にscale_y_continuous()
、軸のきれいな値を取得するために使用されます。
require(ggplot2)
require(plyr)
ggplot(data=test,aes(x=as.factor(v),fill=g)) +
geom_bar(subset=.(g=="F")) +
geom_bar(subset=.(g=="M"),aes(y=..count..*(-1))) +
scale_y_continuous(breaks=seq(-40,40,10),labels=abs(seq(-40,40,10))) +
coord_flip()
アップデート
subset=.
最新バージョンでは引数が非推奨になっているggplot2
ため、関数を使用して同じ結果を得ることができますsubset()
。
ggplot(data=test,aes(x=as.factor(v),fill=g)) +
geom_bar(data=subset(test,g=="F")) +
geom_bar(data=subset(test,g=="M"),aes(y=..count..*(-1))) +
scale_y_continuous(breaks=seq(-40,40,10),labels=abs(seq(-40,40,10))) +
coord_flip()
