web-dev-qa-db-ja.com

カウントのパーセンテージとしてy軸とバーを使用したR(ggplot2)の積み上げ棒グラフ

私はggplot2の初心者で、積み上げ棒グラフの生成について質問があります。本と専用ウェブページを確認しましたが、解決できません。私には2つの要素があり、そのうちの1つには2つのレベル(存在-不在)があり、他の10のレベルがあります。これら2つを「変数」と「フルーツ」と呼びましょう。

各棒が果物の種類を反映し、「変数」の存在-不在観測の数が互いに積み重ねられた積み上げ棒グラフを作成したいと思います。これは比較的簡単です(以下のプロット1のコードを参照)が、バーとy軸で、「変数」の有無のカウント数をパーセンテージで表現したいと思います。言い換えると、すべてのバーは同じ高さ(合計100%を反映)である必要があり、存在-不在の観測値のカウントはパーセンテージに変換される必要があります。

..count .. * 100/sum(.. count ..)を使用して、y軸のスケールをパーセンテージに変更することはできますが、実際のバーを変換する方法を理解することはできません。ファセットを使用して別のプロットを作成しました(以下のプロット2のコード)。これにより、パーセンテージで目的の結果が得られますが、2つのバーを重ねて表示することをお勧めします。誰かがこれを達成する方法のアイデアを持っていますか?ダミーデータと再現可能な例を提供しました。助けてくれてありがとう。

スティーブ

dat <- data.frame( fruit=c("Apple", "Apple", "Orange", "Orange", "Orange", "Orange",
                   "Orange", "Pear", "Pear", "Pear"), variable=c("Present", "Absent",
                   "Present", "Present", "Present", "Present", "Absent", "Absent",
                   "Absent", "Present") )  

# stacked bar plot  
ggplot(dat, aes(x = fruit, fill = variable) ) +  
    geom_bar( aes(y = ..count..*100/sum(..count..) ) ) +
    xlab("Fruit") +
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha( c("firebrick", "dodgerblue4"), 1) )  

enter image description here

# with faceting  
ggplot(dat, aes(x = variable, fill = variable) ) +   
    geom_bar( aes(y = ..count..*100/sum(..count..) ) ) +   
    facet_grid(. ~ fruit) +  
    xlab("Fruit") +
    ylab("Would like this to be percentage") + 
    scale_fill_manual("Condition", values = alpha( c("firebrick", "dodgerblue4"), 1) )  

enter image description here

24
Steve

最初のグラフでは、geom_bar行にposition = 'fill'を追加するだけです!。 ggplotには自動的に行う方法があるため、実際にカウントをスケーリングする必要はありません。

ggplot(dat, aes(x = fruit)) + geom_bar(aes(fill = variable), position = 'fill')
26
Ramnath