Das zentrale Problem der OP zu haben scheint , ist , dass sie sehr schwere tailed Daten haben - und ich glaube nicht , die meisten der vorliegenden Antworten tatsächlich mit diesem Thema beschäftigen überhaupt , so dass ich auf eine Antwort meinen vorherigen Kommentar bin zu fördern.
Wenn Sie bei Boxplots bleiben wollten, sind nachfolgend einige Optionen aufgeführt. Ich habe einige Daten in R erstellt, die das Grundproblem zeigen:
set.seed(seed=7513870)
x <- rcauchy(80)
boxplot(x,horizontal=TRUE,boxwex=.7)
Die mittlere Hälfte der Daten ist auf einen winzigen Streifen von einigen mm Breite reduziert. Das gleiche Problem betrifft die meisten anderen Vorschläge - einschließlich QQ-Diagramme, Streifendiagramme, Bienenstock- / Bienenwarmdiagramme und Geigendiagramme.
Nun einige mögliche Lösungen:
1) Umwandlung ,
Wenn Protokolle oder Umkehrungen ein lesbares Boxplot erzeugen, sind sie möglicherweise eine sehr gute Idee, und der ursprüngliche Maßstab kann weiterhin auf der Achse angezeigt werden.
Das große Problem ist, dass es manchmal keine "intuitive" Transformation gibt. Es gibt ein kleineres Problem, dass sich Quantile selbst zwar gut genug mit monotonen Transformationen übersetzen lassen, die Zäune jedoch nicht. Wenn Sie nur die transformierten Daten boxplotten (wie hier), haben die Whisker andere x-Werte als im ursprünglichen Plot.
Hier habe ich eine inverse hyperbolische Sünde (asinh) benutzt; Es ist logarithmisch in den Schwänzen und ähnlich wie linear nahe Null, aber die Leute empfinden es im Allgemeinen nicht als intuitive Transformation. Im Allgemeinen würde ich diese Option nicht empfehlen, es sei denn, eine ziemlich intuitive Transformation wie log ist offensichtlich. Code dafür:
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) Skalenbrüche - nehmen Sie extreme Ausreißer und komprimieren Sie sie in engen Fenstern an jedem Ende mit einer viel stärker komprimierten Skala als in der Mitte. Ich empfehle dringend eine vollständige Pause über die gesamte Skala, wenn Sie dies tun.
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) Trimmen extremer Ausreißer (was ich normalerweise nicht empfehlen würde, ohne dies sehr deutlich anzugeben, aber es sieht aus wie das nächste Diagramm, ohne die "<5" und "2>" an beiden Enden) und
4) Was ich Extrem-Ausreißer "Pfeile" nennen werde - ähnlich wie beim Trimmen, aber mit der Anzahl der getrimmten Werte, die an jedem Ende angezeigt werden
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)))