Центральная проблема ОП , как представляется, является то , что они имеют очень тяжелые-хвостатые данные - и я не думаю , что большинство настоящих ответов фактически имеем дело с этим вопросом на всех , поэтому я продвижения мой предыдущий комментарий к ответу.
Если вы хотите остаться с коробками, некоторые варианты перечислены ниже. Я создал некоторые данные в R, которые показывают основную проблему:
set.seed(seed=7513870)
x <- rcauchy(80)
boxplot(x,horizontal=TRUE,boxwex=.7)
Средняя половина данных уменьшается до крошечной полосы шириной в пару мм. Та же самая проблема затрагивает большинство других предложений - в том числе графики QQ, полосы, графики улья / пчелиного тепла и участки скрипки.
Теперь несколько потенциальных решений:
1) трансформация ,
Если бревна или перевернутые диаграммы дают удобочитаемую коробочную диаграмму, они могут быть очень хорошей идеей, и исходный масштаб все еще может быть показан на оси.
Большая проблема в том, что иногда нет «интуитивного» преобразования. Есть меньшая проблема, которая заключается в том, что, хотя сами квантили достаточно хорошо транслируют монотонные преобразования, заборы этого не делают; если вы просто нанесите на карту преобразованные данные (как я сделал здесь), усы будут иметь другие значения х, чем в исходном графике.
Здесь я использовал обратный гиперболический грех (asinh); это похоже на бревно в хвостах и похоже на линейное приближение к нулю, но люди обычно не находят это интуитивно понятным преобразованием, поэтому в общем случае я бы не рекомендовал эту опцию, если не очевидно достаточно интуитивное преобразование, такое как log Код для этого:
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) разрывы шкалы - возьмите крайние выбросы и сожмите их в узкие окна на каждом конце с гораздо более сжатой шкалой, чем в центре. Я настоятельно рекомендую сделать полный перерыв по всей шкале, если вы сделаете это.
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) обрезание экстремальных выбросов (что я бы обычно не советовал, не указав это очень четко, но похоже на следующий график, без "<5" и "2>" на обоих концах), и
4) то, что я буду называть экстремально-выпадающими "стрелками" - аналогично усечению, но с отсеченным значением, указанным на каждом конце
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)))