O problema central do OP parece ter é que eles têm dados de cauda muito-pesados - e eu não acho que a maioria dos actuais respostas realmente lidar com essa questão em tudo , então eu estou promovendo meu comentário anterior para uma resposta.
Se você quiser ficar com boxplots, algumas opções estão listadas abaixo. Eu criei alguns dados no R que mostra o problema básico:
set.seed(seed=7513870)
x <- rcauchy(80)
boxplot(x,horizontal=TRUE,boxwex=.7)
A metade do meio dos dados é reduzida para uma faixa minúscula com alguns mm de largura. O mesmo problema afeta a maioria das outras sugestões - incluindo gráficos de QQ, diagramas de tira, gráficos de colméia / abelha quente e gráficos de violino.
Agora, algumas soluções em potencial:
1) transformação ,
Se os logs ou inversos produzem um gráfico de caixa legível, eles podem ser uma ideia muito boa e a escala original ainda pode ser mostrada no eixo.
O grande problema é que às vezes não há transformação "intuitiva". Há um problema menor que, embora os quantis se traduzam com transformações monotônicas o suficiente, as cercas não; se você plotar os dados transformados em caixa (como eu fiz aqui), os bigodes terão valores x diferentes dos do gráfico original.
Aqui eu usei um pecado hiperbólico inverso (asinh); é um tipo de log nas caudas e semelhante ao linear próximo de zero, mas as pessoas geralmente não consideram uma transformação intuitiva; portanto, em geral, eu não recomendaria essa opção, a menos que uma transformação bastante intuitiva como o log seja óbvia. Código para isso:
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) quebras de escala - pegue valores extremos extremos e comprima-os em janelas estreitas em cada extremidade com uma escala muito mais comprimida do que no centro. Eu recomendo uma pausa completa em toda a escala, se você fizer isso.
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) recorte de valores extremos extremos (o que eu normalmente não recomendaria sem indicar isso muito claramente, mas parece o próximo gráfico, sem os "<5" e "2>" em cada extremidade), e
4) o que chamarei de "flechas" extremas - semelhantes ao corte, mas com a contagem de valores aparados indicados em cada extremidade
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)))