답변:
(이것은 실제로 주석이지만 설명이 필요하기 때문에 회신으로 게시해야합니다.)
Ed Tufte 는 "정량 정보의 시각적 표시 (p. 125, 1 판 1983)" 에서 박스 플롯 을 재 설계하여 "비공식적이고 탐색적인 데이터 분석을 가능하게합니다. 여기서 연구원의 시간은 선을 그리는 것 이외의 문제에 전념해야합니다." 필자는이 예제에서 70 개의 평행 한 상자 그림을 보여주는 이상 값을 수용하도록 재 설계를 확장했습니다 (완벽하게 자연스럽게).
나는이 더욱 개선하기 위해 여러 가지 방법을 생각할 수 있지만, 하나는 복잡한 데이터 집합을 탐구의 열을 생산할 수있는 것을의 특징이다 : 우리는 우리가 할 수 시각화 만들기 위해 내용입니다 참조 데이터를; 좋은 프레젠테이션은 나중에 올 수 있습니다.
이것을 동일한 데이터의 기존 표현과 비교하십시오.
Tufte는 "데이터 잉크 비율 최대화"라는 원칙에 따라 몇 가지 다른 재 설계를 제시합니다. 이 원칙이 효과적인 탐색 그래픽을 디자인하는 데 어떻게 도움이되는지 설명하는 데 그 가치가 있습니다. 보시다시피, 점을 그리는 메커니즘은 점 마커와 선을 그릴 수있는 그래픽 플랫폼을 찾는 데 달려 있습니다.
아마도 가장 멋진 음모 일 것입니다. 이들은 기본적으로 바이올린 음모를 여러 번 구현 한 것입니다. 바이올린 플롯은 박스 플롯에 비해 큰 이점이 있습니다. 정규이 아닌 분포에 대해 더 자세한 정보를 표시 할 수 있습니다 (예 : 바이 모달 분포를 실제로 잘 표시 할 수 있음). 그것들은 일반적으로 가우스 평활화 (또는 유사)를 기반으로하기 때문에 지수 분포와 같은 높은 엔드 포인트를 갖는 분포에서는 실제로 잘 작동하지 않지만 박스 플롯도 마찬가지입니다.
Beanplots는 R에서 매우 쉽게 달성 할 수 있습니다. beanplot 패키지를 설치하십시오 .
library(beanplot)
# Sampling code from Greg Snow's answer:
my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )
beanplot(my.dat)
이 beanplot
기능에는 수많은 옵션 이 있으므로 마음에 맞게 맞춤 설정할 수 있습니다. ggplot2에서 Beanplots 를 수행하는 방법도 있습니다 (최신 버전 필요).
library(ggplot2)
my.dat <- lapply(1:20, function(x) rnorm(x+10, sample(10, 1), sample(3,1)))
my.df <- melt(my.dat)
ggplot(my.df, aes(x=L1, y=value, group=L1)) + geom_violin(trim=FALSE) +
geom_segment(aes(x=L1-0.1, xend=L1+0.1, y=value, yend=value), colour='white')
여기에 몇 가지 방법으로 샘플 R 코드가 있습니다.이를 확장하고 (라벨 포함) 아마도 함수로 바꾸고 싶을 것입니다.
my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )
tmp <- boxplot(my.dat, plot=FALSE, range=0)
# box and median only
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[2,], seq_along(my.dat), tmp$stats[4,] )
points( tmp$stats[3,], seq_along(my.dat) )
# wiskers and implied box
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[1,], seq_along(my.dat), tmp$stats[2,] )
segments( tmp$stats[4,], seq_along(my.dat), tmp$stats[5,] )
points( tmp$stats[3,], seq_along(my.dat) )