2016-05-26 6 views
1

は、ここではいくつかのダミー(黒)Iは、すべてのデータの平均のエラーバーを表示したいデータデータをサブセット化するときに、ggplot2でエラバーをx軸に沿ってシフトする方法は?

set.seed(3) 
d = data.frame(y = rnorm(120), x =rep(letters[5:7],40), category = rep(LETTERS[1:2],each=60)) 

のみcategory=="B"用(青色)です。

私は

ggplot(d, aes(x=x,y=y)) + stat_summary(geom = "errorbar", fun.data=mean_se) 
+ stat_summary(data=subset(d,category=="B"), geom = "errorbar", 
fun.data=mean_se, color="blue") 

enter image description here

を試みたが、エラーバーの重なりが不快です。だから、

ggplot(d, aes(x=x,y=y)) + stat_summary(geom = "errorbar", fun.data=mean_se) 
+ stat_summary(aes(colour=category), geom = "errorbar", fun.data=mean_se, 
position=position_dodge(0.5)) + scale_colour_manual(values=c(rgb(1,1,1,alpha=0), "blue")) 

enter image description here

を試みたが、エラーバーの幅を自動的に青色の場合に低減され、青と黒のラインの間の平均位置がラベルと一致しません。

これを達成する最適なソリューションは何ですか?

答えて

3

私はstat_summaryを使用しませんでした。その代わりに、集計されたデータとデータのカテゴリBのみを含む平均と標準誤差を計算し、それらの値を使用してプロットを作成することができます。しかし、私はエラーバーがあなたが示したものとは異なることを知りました。

これは質問に対する私の試みです:

library(ggplot2) 
library(dplyr) 

set.seed(3) 
d <- data.frame(y=rnorm(120), x=rep(letters[5:7], 40), 
       category=rep(LETTERS[1:2], each=60)) 

# Calculate the mean and standard error for each group 
df_B <- d %>% filter(category == "B") %>% group_by(x) %>% 
      summarise(mu=mean(y), se=sqrt(var(y)/length(y))) 
df_all <- d %>% group_by(x) %>% summarise(mu=mean(y), se=sqrt(var(y)/length(y))) 

df <- rbind(df_B, df_all) 
df$category <- rep(c("B", "All"), each=3) 


ggplot(df, aes(x=x, ymin=mu - se, ymax=mu + se, color=category, width=0.5)) + 
    geom_errorbar(position=position_dodge(width=0.6)) + 
    scale_color_manual(breaks=c("All", "B"), values=c("black", "blue")) 

enter image description here

関連する問題