2015-04-05 14 views
8

Tôi có một số rất, rất ít giá trị ngoại biên trong tập dữ liệu của tôi làm cho boxplots khó đọc:Bao gồm dấu hiệu của kẻ xuất cực trong ggplot

library(ggplot2) 
mtcars$mpg[1] <- 60 
p <- ggplot(mtcars, aes(factor(cyl), mpg)) 
p + geom_boxplot() 

enter image description here

Do đó, tôi muốn chỉ ra giá trị ngoại biên cực như thế này:

enter image description here

Bất kỳ ý tưởng làm thế nào để làm điều này trong ggplot2? Chuyển trục không phải là một lựa chọn cho tôi ...

Trả lời

8

Đây là một sự khởi đầu:

library("ggplot2") 
mtcars$mpg[1:2] <- c(50,60) 
p <- ggplot(mtcars, aes(factor(cyl), mpg)) 
p + geom_boxplot() 

Xác định giá trị tối đa:

maxval <- 40 

Sử dụng dplyr (cũng có thể được thực hiện trong cơ sở R hoặc plyr) để trích xuất giá trị ngoại biên và cùng nhau đưa các chuỗi văn bản:

library("dplyr") 
dd <- mtcars %>% filter(mpg>maxval) %>% 
    group_by(cyl) %>% 
     summarise(outlier_txt=paste(mpg,collapse=",")) 

Set ma x y giá trị và thêm một mũi tên cộng với nhãn:

library("grid") # needed for arrow() function 
p2 <- p + geom_boxplot() + 
    scale_y_continuous(limits=c(min(mtcars$mpg),maxval))+ 
     geom_text(data=dd,aes(y=maxval,label=outlier_txt), 
       size=3,vjust=1.5,hjust=-0.5)+ 
      geom_segment(data=dd,aes(y=maxval*0.95,yend=maxval, 
         xend=factor(cyl)), 
       arrow = arrow(length = unit(0.1,"cm"))) 
p2 

enter image description here

Các vấn đề liên quan