Masalah utama yang dimiliki OP adalah bahwa mereka memiliki data berekor yang sangat berat - dan saya kira sebagian besar jawaban yang ada saat ini tidak berurusan dengan masalah itu sama sekali , jadi saya mempromosikan komentar saya sebelumnya ke sebuah jawaban.
Jika Anda ingin tetap menggunakan plot box, beberapa opsi tercantum di bawah ini. Saya telah membuat beberapa data dalam R yang menunjukkan masalah mendasar:
set.seed(seed=7513870)
x <- rcauchy(80)
boxplot(x,horizontal=TRUE,boxwex=.7)
Setengah bagian tengah data direduksi menjadi strip kecil selebar beberapa mm. Masalah yang sama menimpa sebagian besar saran lainnya - termasuk plot QQ, strip chart, plot sarang lebah / lebah, dan plot biola.
Sekarang beberapa solusi potensial:
1) transformasi ,
Jika log, atau invers menghasilkan plot box yang dapat dibaca, mereka mungkin ide yang sangat bagus, dan skala aslinya masih dapat ditampilkan pada sumbu.
Masalah besarnya adalah terkadang tidak ada transformasi 'intuitif'. Ada masalah yang lebih kecil bahwa sementara kuantil sendiri menerjemahkan dengan transformasi monoton dengan cukup baik, pagar tidak; jika Anda hanya memplot data yang ditransformasikan (seperti yang saya lakukan di sini), kumisnya akan berada pada nilai x yang berbeda dari pada plot aslinya.
Di sini saya menggunakan inverse-hyperbolic-sin (asinh); itu semacam log-seperti di ekor dan mirip dengan linear mendekati nol, tetapi orang-orang umumnya tidak menganggapnya sebagai transformasi intuitif, jadi secara umum saya tidak akan merekomendasikan opsi ini kecuali transformasi yang cukup intuitif seperti log jelas. Kode untuk itu:
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) skala istirahat - ambil outlier ekstrim dan kompres mereka ke jendela sempit di setiap ujung dengan skala yang jauh lebih terkompresi daripada di tengah. Saya sangat merekomendasikan penembusan total pada seluruh skala jika Anda melakukan ini.
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) pemangkasan outlier ekstrim (yang biasanya tidak saya sarankan tanpa menunjukkan ini dengan sangat jelas, tapi sepertinya plot berikutnya, tanpa "<5" dan "2>" di kedua ujungnya), dan
4) apa yang saya sebut ekstrim-outlier "panah" - mirip dengan pemangkasan, tetapi dengan jumlah nilai yang dipangkas ditunjukkan pada setiap ujung
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)))