2014-09-18 3 views
1

Я пытаюсь добавить метки к geom_boxplot для экстремальных значений с помощью dplyr, и я получаю несогласованность либо с ggplot, либо с dplyr. Что я делаю не так?метки экстремальных значений ggplot2 в geom_boxplot

#toy exmaple 
df=rbind(data.frame(id=rep("1",100),var=paste0("V",seq(1,100)),val=rnorm(100,0,5)), 
     data.frame(id=rep("2",100),var=paste0("V",seq(1,100)),val=rnorm(100,0,3))) 

#subset with extreme values 
df_bound=df%.%group_by(id)%.%filter(val<quantile(val,.025)|val>quantile(val,.975)) 

#plot 
ggplot(df,aes(x=id,y=val,fill=id,label=var))+geom_boxplot()+ 
geom_point(aes(group=id),data=df_bound)+ 
geom_text(aes(group=id),data=df_bound,hjust=-1,size=4) 
+1

Выход выглядит хорошо для меня: что такое несоответствие вы имеете в виду? (Если вы ссылаетесь на то, что это точки рисования, которые не выходят за рамки усов сюжета, это потому, что вы не вычисляете эти точки так же, как ggplot2) –

+0

Вы можете использовать 'boxplot.stats' вместо 'quantile' для определения экстремальных значений. – Roland

ответ

2

это решение проблемы:

df=rbind(data.frame(id=rep("1",100),var=paste0("V",seq(1,100)),val=rnorm(100,0,5)), 
     data.frame(id=rep("2",100),var=paste0("V",seq(1,100)),val=rnorm(100,0,3))) 

#new code 
df_bound=df%.%group_by(id)%>%do(.,data.frame(val=boxplot.stats(.$val)$out)) 
df_bound=left_join(df_bound,df,by=c("id","val")) 

ggplot(df,aes(x=id,y=val,fill=id,label=var))+geom_boxplot()+ 
geom_point(aes(group=id),data=df_bound)+ 
geom_text(aes(group=id),data=df_bound,hjust=-1,size=4)