2016-09-14 5 views
0

私は3つの連続した応答変数と2つのカテゴリの予測変数からなるデータフレームを持っています。私は各応答変数を別々にモデリングしていますが、同じ予測変数を使用しています。私は同じx軸を持つが、各応答変数に対して3つのバサルトを作りたいと思う。 facet_wrapのような書式を取得するといいでしょう。なぜなら、それぞれのグラフは独自のx軸を必要としないからです。いくつかのサンプルデータと、私が作成したグラフの1つを表示するコードを添付しました。ggplot2 - 異なる応答変数で同じx変数を持つグラフを積み重ねる

y1<-sample(1:150, 100, replace=T) 
y2<-sample(1:150, 100, replace=T) 
y3<-sample(1:150, 100, replace=T) 
x1<-sample(x=c("Site1", "Site2"), size=100, replace=T, prob=rep(1/2,2)) 
x2<-sample(x=c("A", "B", "C", "D"), size=100, replace=T, prob=rep(1/4,4)) 

df<-data.frame(y1,y2,y3,x1,x2) 

ggplot(df, aes(x=x2, y=y1, fill=x1)) 

y1sum<-summarySE(df, measurevar="y1", groupvars=c("x1", "x2")) 


ggplot(y1sum, aes(x=x2, y=y1, fill=x1)) + geom_bar(position=position_dodge(),  
stat="identity") + geom_errorbar(aes(ymin=y1-ci, ymax=y1+ci), width=.2, 
position=position_dodge(.9)) 

私は上のグラフを得たいと思いますが、応答変数ごとに重ねて積み重ねてください。

また、私はバーの各セットの上にいくつかの文字を追加して、どの文字が有意に異なるかを示すためのガイダンスもありがとうと思います。

summarySE機能は、ここで http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/

summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE, 
         conf.interval=.95, .drop=TRUE) { 
    library(plyr) 

    # New version of length which can handle NA's: if na.rm==T, don't count them 
    length2 <- function (x, na.rm=FALSE) { 
     if (na.rm) sum(!is.na(x)) 
     else  length(x) 
    } 

    # This does the summary. For each group's data frame, return a vector with 
    # N, mean, and sd 
    datac <- ddply(data, groupvars, .drop=.drop, 
     .fun = function(xx, col) { 
     c(N = length2(xx[[col]], na.rm=na.rm), 
      mean = mean (xx[[col]], na.rm=na.rm), 
      sd = sd  (xx[[col]], na.rm=na.rm) 
     ) 
     }, 
     measurevar 
    ) 

    # Rename the "mean" column  
    datac <- rename(datac, c("mean" = measurevar)) 

    datac$se <- datac$sd/sqrt(datac$N) # Calculate standard error of the mean 

    # Confidence interval multiplier for standard error 
    # Calculate t-statistic for confidence interval: 
    # e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1 
    ciMult <- qt(conf.interval/2 + .5, datac$N-1) 
    datac$ci <- datac$se * ciMult 

    return(datac) 
} 

からコードにアドバイスを提供することができます誰にも事前に感謝をオフに基づいています。

答えて

1

私の代わりに、あなたは以下のコードは、サイトによって着色バープロットの単一の列を作成し、変数で多面的な

library(dplyr) 
test <- df %>% gather(., key="var", value="value", -x1, -x2) %>% 
    group_by(x1,x2,var) %>% summarise(N=n(), 
            Mean = mean(value), 
            sd= sd(value), 
            se = sd/sqrt(N), 
            ci = qnorm(0.975)*se) %>% ungroup 

を使用summarySE機能のdplyrを使用していました。

test %>% ggplot(., aes(x=x2, y=Mean, fill=x1)) + 
    geom_bar(position=position_dodge(), stat="identity") + 
    geom_errorbar(aes(ymin=Mean-ci, ymax=Mean+ci), width=.2,position=position_dodge(.9)) + 
    facet_wrap(~var, ncol = 1) 

バープロットよりも多くの情報を伝えるので、ボックスプロットを使用することを検討する価値はあります。

df %>% gather(., key="var", value="value", -x1, -x2) %>% 
    ggplot(., aes(x=x2, y=value, fill=x1)) +geom_boxplot() + 
    facet_wrap(~var, ncol = 1) 
+1

完璧に働いた乾杯。ボックスプロットのコードもありがとう –

関連する問題