13

さまざまなカテゴリの観測値の割合をプロットするためのより良い方法についてのアドバイスを探しています。

次のようなデータフレームがあります。

cat1 <- c("high", "low", "high", "high", "high", "low", "low", "low", "high", "low", "low")
cat2 <- c("1-young", "3-old", "2-middle-aged", "3-old", "2-middle-aged", "2-middle-aged", "1-young", "1-young", "3-old", "3-old", "1-young")
df <- as.data.frame(cbind(cat1, cat2))

この例では、値が「高」である各年齢層の割合と、値が「低」である各年齢層の割合をプロットしたいと思います。より一般的には、カテゴリ2の値ごとに、カテゴリ1の各レベルに該当する観測値の割合 をプロットしたいと思います。

次のコードは正しい結果を生成しますが、プロットする前に手動でカウントして除算するだけです。ggplot内でその場でこれを行う良い方法はありますか?

library(plyr)
count1 <- count(df, vars=c("cat1", "cat2"))
count2 <- count(df, "cat2")

count1$totals <- count2$freq
count1$pct <- count1$freq / count1$totals

ggplot(data = count1, aes(x=cat2, y=pct))+
facet_wrap(~cat1)+
geom_bar()

この前のstackoverflowの質問は、次のコードで同様のことを提供します。

ggplot(mydataf, aes(x = foo)) + 
geom_bar(aes(y = (..count..)/sum(..count..)))

しかし、分母に「sum(.. count ..)」(すべてのビンのカウントの合計を与える)は必要ありません。むしろ、「cat2」カテゴリのそれぞれの数の合計が必要です。stat_binのドキュメントも調べました。

これを機能させるためのヒントや提案をいただければ幸いです。

4

2 に答える 2

49

これが本当にあなたが探しているものではないかどうかはわかりますが、あなたが私には非常に不自然に見える方法でデータを視覚化しようとしていることに気付くまで、あなたが望んでいたことの説明は非常に混乱していました。

誰かが私に各カテゴリ内の比率でグラフを作成するように頼んだ場合、私はおそらくセグメント化された棒グラフに目を向けるでしょう:

ggplot(df,aes(x = cat2,fill = cat1)) + 
    geom_bar(position = "fill")

ここに画像の説明を入力してください

y軸は、必要に応じて、カウントではなく比率を記録することに注意してください。

于 2012-06-14T03:49:51.537 に答える
8

これはあなたにとって少し遅いかもしれません、そしてそれはggplotを含んでいません、しかし:

モザイクプロットは、2つの要因の相互作用を視覚化するための前進の方法だと思います。

cat1 <- c("high", "low", "high", "high", "high", "low", "low", "low", "high", "low", "low")
cat2 <- c("1-young", "3-old", "2-middle-aged", "3-old", "2-middle-aged", "2-middle-aged", "1-young", "1-young", "3-old", "3-old", "1-young")
df <- as.data.frame(cbind(cat1, cat2))

mosaicplot(cat2 ~ cat1, data = df, col = c(lightskyblue2', 'tomato'))

2つの要因を持つデータのモザイクプロット

このプロットでは、各値のペアのボックスは、そのカテゴリの観測値の数に応じてスケーリングされます。視覚化に役立つカラーベクトルを提供できます。

于 2016-05-27T09:17:58.167 に答える