2011-07-14 21 views
8

ggplot2でスタックバーチャートを作成する際にいくつかの問題があります。私はbarplot()を使って1つを作る方法を知っていますが、ggplot2を使いたいのですが、barを同じ高さにするのはとても簡単です(間違っていなければposition = 'fill' ')。複数の変数のスタックバープロットを作成する - ggplot2 in R

私の問題は、私がお互いの上にプロットしたい複数の変数があることです。

dfr <- data.frame(
    V1 = c(0.1, 0.2, 0.3), 
    V2 = c(0.2, 0.3, 0.2), 
    V3 = c(0.3, 0.6, 0.5), 
    V4 = c(0.5, 0.1, 0.7), 
    row.names = LETTERS[1:3] 
) 

私がしたいことは、X軸上のカテゴリA、B、およびCとのプロットであり、そしてそれらのそれぞれのために、V1、V2、V3、およびV4の値はスタック:私のデータは次のようになりますY軸上にお互いの上に置く。私が見てきたほとんどのグラフは、Y軸に1つの変数しかプロットしていませんが、何とかこれを行うことができると確信しています。

どうすればggplot2でこれを行うことができますか?ありがとう!

+0

+1サンプルデータを追加します。ようこそ。 – Andrie

+0

回答が見つかった場合は、回答を選択してください。 –

答えて

15

まず、いくつかのデータ操作。カテゴリを変数として追加し、データを長形式に溶かします。各バーの塗りつぶしの色を決定するためにvariableという名前の変数を使用して今

dfr$category <- row.names(dfr) 
mdfr <- melt(dfr, id.vars = "category") 

プロット、。

library(scales) 
(p <- ggplot(mdfr, aes(category, value, fill = variable)) + 
    geom_bar(position = "fill", stat = "identity") + 
    scale_y_continuous(labels = percent) 
) 

(EDIT:コードggplot2のV0.9以降必要に応じて、scalesパッケージを使用するように更新)

enter image description here

+0

+1私はちょうど同じことを投稿しようとしていたときにビート! –

+0

@lselzer、素晴らしい心は似ていると思います! IMO、次回は、たとえ非常に似ていても、あなたの答えを投稿することを躊躇しないでください。 –

+0

ありがとうリッチー!これは私のために働く。私は 'p < - ggplot(mdfr、aes(カテゴリ、値、塗りつぶし=変数、位置='塗りつぶし '))+ + geom_bar()'でプロットすれば、バーは同じ高さになるように上方に伸びていない。プロットがそうするために何か他のことをする必要がありますか?ありがとう! – Annemarie

3

私は本当にただ追加するながら、新しい答えを開始するためすみません@Richieが提供する美しい解決策についてのコメント。私はコメントを投稿するための最小限のポイントを持っていないので、ここに私のケースです:

... + geom_bar(position="fill")私のプロットのエラーを投げた、私はggplot2バージョン0.9.3.1を使用しています。溶融のために再形成するのではなく、再形成する。

error_message: 
*Mapping a variable to y and also using stat="bin". 
    With stat="bin", it will attempt to set the y value to the count of cases in each group. 
    This can result in unexpected behavior and will not be allowed in a future version of ggplot2. 
    If you want y to represent counts of cases, use stat="bin" and don't map a variable to y. 
    If you want y to represent values in the data, use stat="identity". 
    See ?geom_bar for examples. (Deprecated; last used in version 0.9.2) 
stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this. 
Error in pmin(y, 0) : object 'y' not found* 

だから私はgeom_bar(stat='identity')に変更して動作します。

+0

これを投稿していただき、ありがとうございます。 –

関連する問題