OP가 가지고있는 핵심적인 문제는 꼬리가 많은 데이터가 있다는 것입니다. 현재 답변의 대부분이 실제로 그 문제 를 전혀 다루지 않는다고 생각 하므로 이전 의견을 답변으로 홍보하고 있습니다.
상자 그림을 유지하려는 경우 일부 옵션이 아래에 나열되어 있습니다. R에서 기본 문제를 보여주는 데이터를 만들었습니다.
set.seed(seed=7513870)
x <- rcauchy(80)
boxplot(x,horizontal=TRUE,boxwex=.7)
데이터의 중간 절반은 폭이 2mm 인 작은 스트립으로 축소됩니다. 같은 문제는 QQ 도표, 스트립 도표, 벌집 / 벌집 도표 및 바이올린 도표를 포함하여 대부분의 다른 제안에 영향을 미칩니다.
이제 몇 가지 잠재적 인 해결책 :
1) 형질 전환 ,
로그 또는 역수가 읽을 수있는 상자 그림을 생성하는 경우 매우 좋은 아이디어 일 수 있으며 원래 축척은 여전히 축에 표시 될 수 있습니다.
가장 큰 문제는 때때로 '직관적 인'변환이 없다는 것입니다. 양자화 자체가 단조로운 변환으로 충분히 번역되지만 울타리는 그렇지 않은 작은 문제가 있습니다. 변환 된 데이터를 박스 플롯하면 (여기에서 한 것처럼) 수염은 원래 플롯과 다른 x 값에 있습니다.
여기서 나는 역 고압 -sin (asinh)을 사용했다; 꼬리에서 로그와 비슷하고 선형 0과 비슷하지만 사람들은 일반적으로 직관적 인 변환을 찾지 않으므로 일반적으로 로그와 같이 상당히 직관적 인 변환이 분명하지 않으면이 옵션을 권장하지 않습니다. 이를위한 코드 :
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) 극단적 인 특이 치의 트리밍
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)))