바이올린 플롯 그리기

목표

이번 장에서는 바이올린 플롯을 그리는 방법을 배우고 boxplot, point, stat_summary 등을 중첩시켜 그리는 방법을 배운다.

2-5-0.png

웹R의 방법

step 1: 데이타 불러오기

이번 장에서는 저자가 만든 moonBook 패키지에 포함되어 있는 acs 데이타를 사용한다. 이 데이타는 급성관동맥증후군(acute coronary syndrome, acs) 환자 857명의 데이타로 그 중 진단명인 Dx(Diagnosis)는 NSTEMI(Non-ST elevation Myocardial infacrtion(MI)), STEMI(ST-elevation MI), Unstable angina의 세개 중 하나이다. 먼저 화살표가 가리키는 대로 acs를 클릭하여 데이타를 선택하면 아래 그림과 같이 표가 나타난다.

2-5-1.png

step 2: 변수의 할당 및 바이올린 플롯 선택

x축 변수에 Dx(1), y축 변수에 age(2)를 선택하여 할당한 후 violin 체크박스를 선택하면(3) 그림과 같이 바이올린 플롯이 나타난다. 바이올린 플롯은 다수의 데이타 분포를 비교할때 사용하는 것으로 분포가 옆으로 나타나가 때문에 여러 개를 비교하는 것이 가능하다.

2-5-2.png

step 3: trim 및 scale선택

바이올린 플롯의 분포는 데이타의 최소값과 최대값까지로 기본 설정이 되어 있으며 바이올린 모양에서 편평한 끝 부분은 데이타의 극단을 나타낸다(trim =TRUE). trim 체크박스를 해제할 경우 꼬리가 나타난다(1). 또한 각 범주별로 바이올린의 면적이 동일하게 나타나지만 면적을 관찰갯수에 맞추어 조절하려면 scale을 count로 맞춘다(2). 이 예에서는 scale을 count로 맞추는 경우 상대적으로 NSTEMI군의 바이올린 면적이 작아지는 것을 볼 수 있다.

2-5-3.png

step 4: 색깔채우기: fill 변수의 할당

바이올린의 색깔을 채우기 위해 fill변수에 Dx를 할당하고(1) Palette를 Pastel2로 선택한다(2). 범례를 없애기 위해 범례 위치에 “none”을 선택한다(3).

2-5-4.png

step 5: boxplot의 중첩

바이올린 플롯과 함께 boxplot을 보여주기 위해 boxplot체크박스를 선택한다(1). boxplot의 fill변수에 “darkred”를 설정한다(2). 그리고 boxplot의 크기를 줄이기 위해 width를 0.1로 설정한다(3).

2-5-5.png

step 6: 산점도의 중첩

이 그래프에 산점도를 중첩시키기 위해 point 체크박스를 선택한다(1). 이 경우 각 점들이 일렬로 세워져 중첩되므로 알아보기 어렵다. 이런 경우 각 점의 위치에 무작위로 noise를 주어 알아볼 수 있도록 흩트리는 방법을 쓰는데 이것을 jittering이라고 한다. jittering을 위해 positionjitter로 한다(2). 그리고 점의 크기가 너무 크므로 size를 1로 한다(3).

2-5-6.png

step 7: 평균의 표시

평균의 표시를 위해 stat_summaty 체크박스를 선택한 후(1) 모양(shape)을 23, 크기(size)를 3으로 설정한다(2).

2-5-7.png

step 8: R 명령어 확인

화면을 밑으로 내리면 R플롯이 나타나고 이 그래프를 그리는데 사용된 R 코드가 표시된다(주홍색 사각형).

2-5-8.png

R의 표준방법

R 명령어를 써서 이 그래프를 그리기 위해서는 다음 명령어를 사용하면 된다.

library(moonBook)  # acs 데이타 사용을 위해
library(ggplot2)   # ggplot()의 사용을 위해

ggplot(acs,aes(x=Dx,y=age,fill=Dx))+                     # 데이타, 변수 할당
 geom_violin(scale='count',trim=FALSE)+        # 바이올린 플롯  
 geom_boxplot(fill='darkred',width=0.1)+                 # 박스플롯
 geom_point(position='jitter',size=1)+                   # 점그래프    
 stat_summary(geom='point',fun.y=mean,shape=23,size=3)+  # 평균표시
 scale_fill_brewer(palette='Pastel2')+                   # 팔레트 선택
 theme(legend.position='none')                           # 범례 없앰