2017-07-31 7 views
0

ggplot2に積み上げ棒グラフを作成して、各カテゴリ変数に対応する値の割合を表示しようとしています。ここでは、私が作業しようとしているデータの例を示します。習慣のfacet_gridでggplot2の複数のカテゴリ変数を持つ積み上げ棒グラフ

sampledf <- data.frame("Death" = rep(0:1, each = 5), 
        "HabitA" = rep(0:1, c(3, 7)), 
        "HabitB" = rep(1:2, c(4, 6)), 
        "HabitC" = rep(0:1, c(6, 4))) 

各私は積み上げ棒グラフを作成するために使用していた列であり、私はfacet_gridにおける死の列を使用します。私は棒グラフの各習慣の値のパーセンテージを表示しようとしています。

出力データは、Death = 0、HabitAの値が60%で、値の40%が1で、Death = 1では100%の値に変換されるはずです。ハビタ値が、私はこの使用してggplotとGROUP_BYのようなグラフを生成している1.

あり、1つの属性のみのために要約し、私はこれは、データ内に複数の質的属性でどのように動作するかを確認していません。

sampledf %>% 
    group_by(Death, HabitA) %>% 
    summarise(count=n()) %>% 
    mutate(perc=count/sum(count)) 

これは私がただ一つの変数のために欲しいものを生成するが、私は、引数によって、グループ内の別の属性を含む場合、それは私が探していますものではありません、すべての3つの属性の組み合わせのための割合をカウント返します。私はsummarise_at/mutate_atを使ってみましたが、動作していないようです。

sampledf %>% 
    group_by(Death) %>% 
    mutate_at(c("HabitA", "HabitB"), Counts = n()) 

Rでこれを行うと、ggplot2の入力として結果のデータを使用するための簡単な方法はありますか?

編集:

私は、データを再構築しようとした私のプロットを構築するために、長いフォームを使用。ここに私が持っているものがあります。

long <- melt(sampledf, id.vars = c("Death")) 

結果のデータはこの形式です。

Death variable value 
1  0 HabitA  0 
2  0 HabitA  0 
3  0 HabitA  0 
4  0 HabitA  1 
5  0 HabitA  1 
6  1 HabitA  1 
7  1 HabitA  1 

私は現在、構築しようとしていますggplotは、各レベルがvariable列で発生した合計回数をカウントしているため、プロットを構築するためにvalue属性を使用するかどうかはわかりません。

ggplot(long, aes(x = variable, fill = variable)) + 
    geom_bar(stat = "count", position = "dodge") + facet_grid(~ Death) 
+0

を追加しました。これを行う方法のいくつかのオプションについては、[here](https://stackoverflow.com/a/25856135/2461552)を参照してください。 – aosmith

答えて

1

これを試してみてください。それほど簡単ではないかもしれませんが、機能します。それには、gatherによって提案された@オオスミスのような再構成が含まれます。その後、グループ化した後の観測数を計算し、各グループのパーセンテージを計算する。Death + habitat。その後、集計して一意の値を取得します。

sampledf_edited <- sampledf %>% 
    tidyr::gather("habitat", "count", 2:4) %>% 
    group_by(Death, habitat, count) %>% 
    mutate(observation = n()) %>% 
    ungroup() %>% 
    group_by(Death, habitat) %>% 
    mutate(percent = observation/n()) %>% 
    ungroup() %>% 
    group_by(Death, habitat, count, percent) %>% 
    summarize() 

count因子が必要です。

sampledf_edited$count <- as.factor(sampledf_edited$count) 

プロットby ggplot

ggplot(sampledf_edited, aes(habitat, percent, fill = count)) + 
geom_bar(stat = "identity") + 
facet_grid(~ Death) 

ご質問にお答えいただいた場合は、さらに参考になる回答を受け入れるようにしてください。

--- EDIT --- プロットは、あなたが前に要約し、プロットに長い形式にデータセットを再形成考えるかもしれ

ggplot

+0

素晴らしいですが、これは完全に機能します!バーを積み重ねるのではなく一緒にグループ化する方法はありますか? – PrashanthVajjhala

+1

'geom_bar'関数に' position = "dodge"を追加します。しかしバーの幅は同じではありません。修正については、[この回答](https://stackoverflow.com/a/11021812/7886302)をチェックしてください。 – tlask

関連する問題