2013-09-24 109 views
0

我正在製作一個帶有ggplot2的箱線圖,並嘗試(沒有任何成功)將每個變量的平均值放在它上面。有人可以指出什麼是錯的?帶平均分的箱線圖

重複的例子:

data <- data.frame(id=1:5000, Estimativa0=gl(5, 1000), NM.Intra1=rnorm(5000, rep(rnorm(5, 0, 4), each=1000)), NM.Entre2=rnorm(5000, rep(rnorm(5, 0, 4), each=1000)), SPADE3=rnorm(5000, rep(rnorm(5, 0, 4), each=1000)), NCI4=rnorm(5000, rep(rnorm(5, 0, 4), each=1000))) 
data <- reshape(data, direction='long', varying=list(c("NM.Intra1", "NM.Entre2", "SPADE3", "NCI4")), idvar=c('id', 'Estimativa0'), times=c("NM.Intra1", "NM.Entre2", "SPADE3", "NCI4"), timevar='Método') 
levels(data$Estimativa0) <- c('Est 1', 'Est 2', 'Est 3', 'Est 4', 'Est 5', 'Est 6') 
p <- ggplot(data, aes(Método, NM.Intra1)) 
p <- p + geom_boxplot(aes(fill=factor(Estimativa0))) + ylab('Vício') + xlab('Método') + scale_fill_discrete("Estatística") + ggtitle('Gráfico maluco da Greice') + geom_hline(yintercept=0) 
p 

的第一次嘗試是:

medias <- with(data, aggregate(data.frame(Media=NM.Intra1), by=list(Estimativa0=Estimativa0, Método=Método), FUN=mean)) 
p + geom_point(aes(x=Método, y=Media), data=medias, shape=2) 

但在相同的 '豎線' ploted所有點。我試圖解決方案指出here,但不能太:

p + stat_summary(fun.y=mean, colour="red", geom="point", position=position_dodge(width=0.75), shape=2) 

所以,我錯過了什麼?

回答

4

我假設你想要每個Método - Estimativa0組合的平均值。在這種情況下,您需要通過Estimativa0告知stat_summary進行分組;現在,映射只能在geom_boxplot中完成,因此不會被stat_summary繼承。

因此,刪除:

aes(fill=factor(Estimativa0)) 

而在初始映射把fill=factor(Estimativa0)

aes(Método, NM.Intra1, fill=factor(Estimativa0)) 

你會這樣結束了:

p <- ggplot(data, aes(Método, NM.Intra1, fill=factor(Estimativa0))) 
p <- p + geom_boxplot() + ylab('Vício') + xlab('Método') + scale_fill_discrete("Estatística") + ggtitle('Gráfico maluco da Greice') + geom_hline(yintercept=0) 
p + stat_summary(fun.y=mean, colour="red", geom="point", position=position_dodge(width=0.75), shape=2) 

產生這樣的:

enter image description here