Vấn đề trung tâm OP dường như có là họ có dữ liệu đuôi rất nặng - và tôi không nghĩ rằng hầu hết các câu trả lời hiện nay thực sự đối phó với vấn đề mà ở tất cả , vì vậy tôi đang thúc đẩy bình luận trước đây của tôi đến một câu trả lời.
Nếu bạn đã muốn ở lại với boxplots, một số tùy chọn được liệt kê dưới đây. Tôi đã tạo một số dữ liệu trong R cho thấy vấn đề cơ bản:
set.seed(seed=7513870)
x <- rcauchy(80)
boxplot(x,horizontal=TRUE,boxwex=.7)
Nửa giữa của dữ liệu được giảm xuống một dải nhỏ rộng vài mm. Vấn đề tương tự cũng ảnh hưởng đến hầu hết các đề xuất khác - bao gồm các ô QQ, biểu đồ dải, âm mưu tổ ong / sáp ong và âm mưu violin.
Bây giờ một số giải pháp tiềm năng:
1) biến đổi ,
Nếu các bản ghi hoặc nghịch đảo tạo ra một boxplot có thể đọc được, chúng có thể là một ý tưởng rất tốt và quy mô ban đầu vẫn có thể được hiển thị trên trục.
Vấn đề lớn là đôi khi không có sự chuyển đổi 'trực quan'. Có một vấn đề nhỏ hơn là trong khi bản thân các lượng tử dịch với các phép biến đổi đơn điệu đủ tốt, thì hàng rào lại không; nếu bạn chỉ boxplot dữ liệu được chuyển đổi (như tôi đã làm ở đây), các bộ râu sẽ ở các giá trị x khác với trong cốt truyện gốc.
Ở đây tôi đã sử dụng một nghịch đảo-hyperbolic-sin (asinh); nó giống như nhật ký ở đuôi và tương tự tuyến tính gần bằng 0, nhưng mọi người thường không thấy nó là một phép biến đổi trực quan, vì vậy nói chung tôi sẽ không đề xuất tùy chọn này trừ khi chuyển đổi khá trực quan như nhật ký là rõ ràng. Mã cho điều đó:
xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)
2) phá vỡ tỷ lệ - lấy các ngoại lệ cực đoan và nén chúng vào các cửa sổ hẹp ở mỗi đầu với tỷ lệ nén nhiều hơn so với ở trung tâm. Tôi thực sự khuyên bạn nên nghỉ ngơi hoàn toàn trên toàn bộ quy mô nếu bạn làm điều này.
opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)
3) cắt xén các ngoại lệ cực đoan (mà tôi thường không khuyên mà không chỉ ra điều này rất rõ ràng, nhưng có vẻ như cốt truyện tiếp theo, không có "<5" và "2>" ở hai đầu) và
4) cái mà tôi sẽ gọi là "mũi tên" cực kỳ xa lạ - tương tự như cắt tỉa, nhưng với số lượng giá trị được cắt bớt được chỉ ra ở mỗi đầu
xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))