残念ながら、ggplot2 に求めているのは、ファセットごとに個別の y を定義することですが、これは構文的に知る限り実行できません。
したがって、コメント スレッドで「基本的にヒストグラムが必要なだけ」という言及に応えて、代わりにgeom_histogram
or を使用することをお勧めしgeom_freqpoly
ます。
ggplot(iris, aes(Sepal.Width, ..count..)) +
geom_histogram(aes(colour=Species, fill=Species), binwidth=.2) +
geom_freqpoly(colour="black", binwidth=.2) +
facet_wrap(~Species)
**注: geom_freqpoly は、上記の例の geom_histogram の代わりに機能します。効率のために、両方を 1 つのプロットに追加しました。
お役に立てれば。
編集: わかりました、私はあなたが望むものを手に入れるための迅速かつ汚い方法をなんとか解決しました. をインストールしてロードする必要がありますplyr
。あらかじめお詫び申し上げます。これは、RAM の使用に関して最も効率的な方法ではない可能性がありますが、機能します。
まず、虹彩を公開してみましょう (私は RStudio を使用しているので、ウィンドウ内のすべてのオブジェクトを表示することに慣れています)。
d <- iris
これで、x 軸となる各固有の測定値に属する個体の数をカウントするために使用できますddply
(ここでは、Sepal.Width の代わりに Sepal.Length を使用しました。プロット時のグループ間の差)。
new <- ddply(d, c("Species", "Sepal.Length"), summarize, count=length(Sepal.Length))
ddply
引用符で囲まれた変数に従って、出力 data.frameを自動的にソートすることに注意してください。
次に、data.frame をそれぞれの固有の条件に分割できます。アイリスの場合は、3 つの種のそれぞれです (もっとスムーズな方法があると確信しています。非常に大量のデータの場合、RAM を使い果たす可能性があるため、同じ data.frame のサブセットを作成し続けることはお勧めできません)...
set <- new[which(new$Species%in%"setosa"),]
ver <- new[which(new$Species%in%"versicolor"),]
vgn <- new[which(new$Species%in%"virginica"),]
...そしてddply
再び使用して、各測定に該当する個体の割合を計算しますが、種ごとに個別に計算します。
prop <- rbind(ddply(set, c("Species"), summarize, prop=set$count/sum(set$count)),
ddply(ver, c("Species"), summarize, prop=ver$count/sum(ver$count)),
ddply(vgn, c("Species"), summarize, prop=vgn$count/sum(vgn$count)))
次に、必要なものをすべて 1 つのデータセットに入れ、ワークスペースから不要なものをすべて取り除きます。
new$prop <- prop$prop
rm(list=ls()[which(!ls()%in%c("new", "d"))])
そして、y 上のファセット固有のプロポーションで図を作成できます。data.frame を自動的に注文したgeom_line
ので、現在使用していることに注意してください。ddply
ggplot(new, aes(Sepal.Length, prop)) +
geom_line(aes(colour=new$Species)) +
facet_wrap(~Species)
# let's check our work. each should equal 50
sum(new$count[which(new$Species%in%"setosa")])
sum(new$count[which(new$Species%in%"versicolor")])
sum(new$count[which(new$Species%in%"versicolor")])
#... and each of these should equal 1
sum(new$prop[which(new$Species%in%"setosa")])
sum(new$prop[which(new$Species%in%"versicolor")])
sum(new$prop[which(new$Species%in%"versicolor")])