여러 배포판에 대한 Boxplot?


9

R의 단일 그래프에서 20 개의 분포를 그려야하며 boxwex = 0.3 인 경우에도 일반 상자 그림 (20 상자)으로 나쁘지 않습니다. 아래 20과 같이 20 분포에 대해 R에 일종의 상자 그림을 플롯하고 중간 점과 상자 대신 선으로 점을 그리는 방법을 제안 할 수 있습니까? 멋진 상자 그림을 생성하는 R 방법이 있는지, 특히 단일 분포로 여러 분포를 표시하려는 경우 제안하십시오.

 -----0----

답변:


12

(이것은 실제로 주석이지만 설명이 필요하기 때문에 회신으로 게시해야합니다.)

Ed Tufte 는 "정량 정보의 시각적 표시 (p. 125, 1 판 1983)" 에서 박스 플롯재 설계하여 "비공식적이고 탐색적인 데이터 분석을 가능하게합니다. 여기서 연구원의 시간은 선을 그리는 것 이외의 문제에 전념해야합니다." 필자는이 예제에서 70 개의 평행 한 상자 그림을 보여주는 이상 값을 수용하도록 재 설계를 확장했습니다 (완벽하게 자연스럽게).

Tufte 박스 플롯

나는이 더욱 개선하기 위해 여러 가지 방법을 생각할 수 있지만, 하나는 복잡한 데이터 집합을 탐구의 열을 생산할 수있는 것을의 특징이다 : 우리는 우리가 할 수 시각화 만들기 위해 내용입니다 참조 데이터를; 좋은 프레젠테이션은 나중에 올 수 있습니다.

이것을 동일한 데이터의 기존 표현과 비교하십시오.

기존 박스 플롯

Tufte는 "데이터 잉크 비율 최대화"라는 원칙에 따라 몇 가지 다른 재 설계를 제시합니다. 이 원칙이 효과적인 탐색 그래픽을 디자인하는 데 어떻게 도움이되는지 설명하는 데 그 가치가 있습니다. 보시다시피, 점을 그리는 메커니즘은 점 마커와 선을 그릴 수있는 그래픽 플랫폼을 찾는 데 달려 있습니다.


R에서 상위 그래프를 그리는 데 도움이 될 수 있습니까?
사마 라사

1
@kkp 대략적인 초안이 있습니다. 좋은 반응 (+1).
chl


@chl 링크 주셔서 감사합니다. 기록을 위해, 재 설계된 박스 플롯을 생성하기위한 작업 R 코드가 포함됩니다. 흥미롭게도, 그 질문은이 질문 이후 3 일 만에 게시되었습니다.
whuber

1
@naught 흥미로운 관찰. 이러한 박스 플롯의 하나의 잠재적 인 사용은 (대형) 산점도가 x 좌표를 따라 슬라이스되고 y 값이 각 빈의 박스 플롯으로 요약되는 Tukey의 "방랑 회로도"의 변형입니다. 이러한 절차는 70 개 이상의 나란히 박스 플롯을 쉽게 생성 할 수 있습니다. 응용 분야에는 거의 모든 다차원 데이터가 포함됩니다. 예를 들어, x 좌표는 매 센티미터마다 샘플링 된 토양 깊이를 나타내고 y 좌표는 여러 위치에서 얻은 데이터를 나타낼 수 있습니다.
whuber

10

Beanplots

아마도 가장 멋진 음모 일 것입니다. 이들은 기본적으로 바이올린 음모를 여러 번 구현 한 것입니다. 바이올린 플롯은 박스 플롯에 비해 큰 이점이 있습니다. 정규이 아닌 분포에 대해 더 자세한 정보를 표시 할 수 있습니다 (예 : 바이 모달 분포를 실제로 잘 표시 할 수 있음). 그것들은 일반적으로 가우스 평활화 (또는 유사)를 기반으로하기 때문에 지수 분포와 같은 높은 엔드 포인트를 갖는 분포에서는 실제로 잘 작동하지 않지만 박스 플롯도 마찬가지입니다.

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')

GGplot2 빈 플롯


3

여기에 몇 가지 방법으로 샘플 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) )

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.