2017-10-09 17 views
-2

Rでの私のデータセットは以下のようになります。Rのggplot2:複雑な積み重ね棒グラフ、複数のカテゴリ変数と

a <- c("M","F","F","F","M","M","F","F","F","M","F","F","M","M","F") 
p <- c("P","P","W","W","P","P","W","W","W","W","P","P","P","W","W") 
y1 <- c("yes","yes","null","no","no","no","yes","null","no","yes","yes","yes","null","no","no") 
y2 <- c("yes","null","no","no","no","yes","yes","yes","null","no","yes","null","no","yes","yes") 
y3 <- c("no","no","no","yes","null","yes","null","no","no","no","yes","yes","null","no","no") 
VE <- data.frame(gender = a, 
      type = p, 
      y1 = y1, 
      y2 = y2, 
      y3 = y3) 

そして、私はこのようになります棒グラフを作成したいと思います: ideal bar chart

Iグラフを得るための長い道のりを見つけただけです。

q<-data.frame(gender=VE$gender, 
      year=rep("y1",15), 
      group=VE$y1) 
p<-data.frame(gender=VE$gender, 
      year=rep("y2",15), 
      group=VE$y2) 
x<-data.frame(gender=VE$gender, 
      year=rep("y3",15), 
      group=VE$y3) 
Table<-rbind(q,p,x) 
ggplot(Table, aes(year)) + geom_bar(aes(fill=group), position = "stack") + facet_grid(gender~.) 

棒グラフを取得するには良い方法はありますか? (元々、それぞれ32個の変数を持つ3,000,000個のobsevationsに対処する予定だったので) この棒グラフで何か助けてください。乾杯!

+3

画像であなたのデータを示すには、複製が容易になりません。 [this](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)とヘルプを読み、質問を編集してください。またはあなたの[質問](https://stackoverflow.com/questions/38877580/stacked-bar-plot-with-4-categorical-variables-in-r?rq=1)を検索してください。結局あなたの質問の側面。 – shea

+0

[Rの4つのカテゴリ変数を持つ積み重なった棒グラフ]の可能な複製(https://stackoverflow.com/questions/38877580/stacked-bar-plot-with-4-categorical-variables-in-r) – shea

答えて

0

まず、data.frameを溶かして「長い」形式にすることができます。 ID変数を作成しました.3つの変数 'y1、' y2 '、および' y3 'が1つの変数にまとめられています。 ggplot2を使用し、geom_bar()を使用すると、y審美性が提供されていない場合、x審美的な値を数えます。返し

library(ggplot2) 

# create data frame 
df <- data.frame(ID = 1:15, 
      gender = c('M', 'F', 'F', 'F', 'M', 'M', 'F', 'F', 'F', 'M', 'F', 'F', 'M', 'M', 'F'), 
      type = toupper(c('p', 'p', 'w', 'w', 'p', 'p', 'w', 'w', 'w', 'w', 'p', 'p', 'p', 'W', 'W')), 
      y1 = c('yes', 'yes', 'null', 'no', 'no', 'no', 'yes', 'null', 'no', 'yes', 'yes', 'yes', 'null', 'no', 'no'), 
      y2 = c('yes', 'null', 'no', 'no', 'no', 'yes', 'yes', 'yes', 'null', 'no', 'yes', 'null', 'no', 'yes', 'yes'), 
      y3 = c('no', 'no', 'no', 'yes', 'null', 'yes', 'null', 'no', 'no', 'no', 'yes', 'yes', 'null', 'no', 'no'), 
      stringsAsFactors = TRUE) 

# melt data frame to long format 
df_melt <- data.table::melt(df[, c(1, 4:6)], id.vars = "ID") 

# set correct levels for factor (needed for the legend) 
df_melt$value <- factor(df_melt$value, levels = c("yes", "no", "null")) 

# add ggplot 
ggplot(data = df_melt) + 
    geom_bar(aes(x = variable, fill = value, colour = value)) + 
    ylab("count") + 
    xlab("year") 

output_ggplot

+0

基本的には私の長年の変換を自動的に実装する "reshape"パッケージのmelt()関数。ありがとう! –

関連する問題