2012-10-20 28 views
31

Tôi muốn đặt các đường vuông góc ở đầu của râu như chức năng boxplot tự động cung cấp.Đặt đầu ria trên ô vuông

+1

bạn có thể làm điều này bằng cách tính toán quantile nơi ggplot vẽ các đường và vẽ 'geom_segment' của riêng bạn hoặc 'geom_crossbar'. xem [câu hỏi này] (http://stats.stackexchange.com/questions/8137/how-to-add-horizontal-lines-to-ggplot2-boxplot) – Justin

+1

Có một số lý do tại sao điều này phải được thực hiện trong ggplot2, và không sử dụng 'boxplot' mà đã làm những gì bạn muốn, hoặc là câu hỏi này hoàn toàn quan tâm học tập ...? –

+0

@Justin Cảm ơn, tôi đã kiểm tra câu hỏi đó nhưng nó quá tiên tiến đối với tôi và tôi vẫn gặp lỗi, tôi không biết bit nào cần thay thế bằng cái gì, xin lỗi:/ – user1762299

Trả lời

6

Có thể sử dụng stat_boxplot để tính toán kết thúc râu, nhưng tôi không đủ trình hướng dẫn ggplot2, vì vậy tôi sử dụng hàm cơ sở cho điều đó.

set.seed(42) 
df <- data.frame(cond = factor(rep(c("A","B"), each=500)), 
       value = c(rnorm(500,mean=1,sd=0.2),rnorm(500, mean=1.5,sd=0.1))) 


whisk <- function(df,cond_col=1,val_col=2) { 
    require(reshape2) 
    condname <- names(df)[cond_col] 
    names(df)[cond_col] <- "cond" 
    names(df)[val_col] <- "value" 
    b <- boxplot(value~cond,data=df,plot=FALSE) 
    df2 <- cbind(as.data.frame(b$stats),c("min","lq","m","uq","max")) 
    names(df2) <- c(levels(df$cond),"pos") 
    df2 <- melt(df2,id="pos",variable.name="cond") 
    df2 <- dcast(df2,cond~pos) 
    names(df2)[1] <- condname 
    df2 
} 



library(ggplot2) 

plot1 <- ggplot(df, aes(x=cond)) 
plot1 <- plot1 + geom_errorbar(aes(ymin=min,ymax=max),data=whisk(df),width = 0.5) 
plot1 <- plot1 + geom_boxplot(aes(y=value)) 
plot1 

boxplot with horizontal at whisker ends

45

Như lời đề nghị nhưng không được thực hiện bởi @Roland, bạn có thể sử dụng stat_boxplot để thực hiện điều này. Bí quyết gọi _boxplot hai lần và là đặt geom thành errorbar cho một trong các cuộc gọi.

Lưu ý rằng khi R sử dụng phương pháp tiếp cận bút và giấy, bạn nên triển khai các thanh lỗi trước tiên vẽ ô mẫu truyền thống lên trên cùng.

Sử dụng @ dữ liệu giả Roland df

ggplot(df, aes(x=cond, y = value)) + 
stat_boxplot(geom ='errorbar') + 
geom_boxplot() # shorthand for stat_boxplot(geom='boxplot') 

enter image description here

Sự giúp đỡ cho stat_boxplot (?stat_boxplot) chi tiết các giá trị khác nhau tính toán và lưu trong một data.frame

+0

Cảm ơn bạn đã dành thời gian giải thích điều này! :) – gaelgarcia

+1

làm cách nào tôi có thể thay đổi kích thước các dòng râu này nếu tôi sử dụng 'geom_boxplot (width = .2)'? – Produnis

+3

@ Produnis Để thay đổi kích thước các dòng râu, hãy thêm đối số 'stat_params = list (width = 0.5)' bên trong hàm: 'stat_boxplot'. Xem kết quả trong câu trả lời của tôi. – mpalanco

14

Để thay đổi kích thước râu đường chúng ta có thể sử dụng đối số width = 0.5 bên trong hàm: stat_boxplot

set.seed(42) 
df <- data.frame(cond = factor(rep(c("A", "B"), each = 500)), 
       value = c(rnorm(500, mean = 1, sd = 0.2), 
          rnorm(500, mean = 1.5, sd = 0.1))) 

library(ggplot2) 
ggplot(df, aes(x = cond, y = value)) + 
     stat_boxplot(geom = "errorbar", width = 0.5) + 
     geom_boxplot() 

enter image description here

+0

Điều này dường như không hiệu quả đối với tôi; Tôi nhận được 'Lỗi: Tham số không xác định: stat_params'. Bạn đang sử dụng phiên bản R nào? – Will

+0

@Tôi đã sửa đổi câu trả lời chưa. Phiên bản mới ggplo2 2.0.0 không chấp nhận đối số đó 'stat_params'. Bây giờ nó sẽ hoạt động. – mpalanco

+0

Tuyệt vời, đã hoạt động! Cảm ơn! – Will

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