web-dev-qa-db-ja.com

Rでグループ化された棒グラフ内に積み上げ棒を作成する方法

次のグラフがあります

test  <- data.frame(person=c("A", "B", "C", "D", "E"), 
                    value1=c(100,150,120,80,150),     
                    value2=c(25,30,45,30,30) , 
                    value3=c(100,120,150,150,200)) 

1人の棒がvalue1を示し、もう1本の棒がvalue2とvalue3のスタックである場合、各人のグループ化された棒グラフ(水平)をプロットします。 ggplot2を使用してこれを行う方法はありますか?ファセットを使用して、これらの個々のグラフを上下にプロットできますか?

11
Sudhi

ここで私が思いついたのは、ここで提案された解決策に似ています: グループ化された棒グラフ内の積み上げ棒

  1. メルトdata.frameと新しい列を追加cat

    library(reshape2) # for melt
    
    melted <- melt(test, "person")
    
    melted$cat <- ''
    melted[melted$variable == 'value1',]$cat <- "first"
    melted[melted$variable != 'value1',]$cat <- "second"
    
  2. 積み上げグラフcatvaluepersonでファセットしてプロットします。必要に応じてラベルを調整する必要がある場合があります。

    ggplot(melted, aes(x = cat, y = value, fill = variable)) + 
      geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ person)
    

enter image description here

36
Victor K.