본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
Plotly in R - 그래프에 마우스를 올려봅시다

반 반 바이올린 플롯 in R

by 아참형인간 2022. 4. 26.
box1.knit

violin trace의 사용

사용데이터 : https://2stndard.tistory.com/68

박스 플롯은 데이터의 전반적 분포를 살펴볼 수 있는 매우 좋은 시각화 방법이다. 앞서 설명한 산점도는 X, Y축 모두 연속형 수치 데이터를 사용하지만 박스 플롯은 이산형 데이터로 분류되는 데이터의 전반적 분포를 시각화할 수 있다는 점에서 활용도가 크고 산점도(Scatter Plot)에서는 표현할 수 없었던 중간값, IQR 범위, 이상치 등의 추가적인 정보를 같이 볼 수 있다는 장점이 있다.

박스 플롯으로 표현되는 상자의 중심은 중앙값이다. 중앙값은 가로선으로 표현되며 그 주위를 상자가 둘러싸고 있다. 상자의 상단과 하단은 관측값들의 25%와 75%를 나타낸다. 상자의 상단과 하단 범위를 벗어나면 사분위 범위의 1.5배에 해당하는 ’수염(whisker)’으로 표현된다. 수염 밖에 존재하는 값은 점으로 표기하며 이상치로 간주된다.

이 박스 플롯의 단점은 데이터의 25%, 50%, 75%의 사분위 지점을 알 수 있지만 데이터의 전반적인 분포를 알아보기는 어렵다. 이 단점을 극복하기 위해 사용하는 시각화가 바이올린 플롯이다. 바이올린 trace는 바이올린 플롯을 생성하기 위해 사용되는 trace이다. 앞 장에서 설명했듯이 바이올린 플롯은 박스 플롯에서 확인하기 어려운 데이터의 분포를 확인할 수 있는 시각화 방법이다.

바이올린 trace를 사용해 바이올린 플롯을 생성하기 위해서는 add_trace(type = 'violin')를 사용하여야하고 래핑함수를 제공하지 않는다.

add_trace(p, type = ‘violin’, …, data = NULL, inherit = TRUE)
- p : plot_ly()로 생성한 plotly 객체
- type : trace 타입을 ’violin’로 설정
- … : 바이올린 trace의 line 모드에 설정할 수 있는 속성 설정
- data : 시각화할 데이터프레임
- inherit : plot_ly()에 설정된 속성 type을 상속할지를 결정하는 논리값

p_violin <- 
  df_취업률_2000 |> plot_ly()

p_violin |> 
  ## 바이올린 trace 추가
  add_trace(type = 'violin', x = ~대계열, y = ~취업률) |>
  layout(title = list(text = '대학 계열별 취업률 분포'), 
         margin = margins)

바이올린 trace에서 사용되는 주요 속성은 다음과 같다.

속성 설명 속성 값 세부 속성
type trace type 속성 ‘violin’
visible trace의 표시 설정 TRUE, FALSE, ‘legendonly’
width 바이올린 trace 너비 설정 0 이상의 수치값
orientation 바이올린 trace의 방향 설정 ‘v’, ‘h’
marker 바이올린 trace의 세부 설정 세부 속성들의 리스트 color, line(color, outliercolor, outlierwidth, width), opacity, outliercolor, size, symbol
line 바이올린 trace 외곽선 설정 세부 속성들의 리스트 color, width
box 바이올린 trace 내부에 표현되는 박스 trace 설정 세부 속성들의 리스트 fillcolor, line(color, width), visible, width
pointpos 샘플 점이 그려지는 상대적 위치 설정 -2~2까지의 수치
jitter 샘플 점이 그려지는 너비 설정 0 ~ 1 사이 값
meanline 평균 선의 설정 세부 속성들의 리스트 color, visible, width
points 데이터 값을 점으로 표시 여부 설정 ‘all’, ‘outlier’, ‘suspectedoutliers’, FALSE

위에서 그려진 바이올린 플롯은 ggplot2geom_violin()으로도 그려지는 형태의 바이올린 플롯이다. 하지만 plotly에서는 ggplot2에서 지원하지 못하는 특별한 형태의 바이올린 플롯을 지원한다. 바이올린 플롯을 반으로 나누어서 두 개의 그룹을 비교해 볼 수 있는 형태의 바이올린 플롯이다.

두 개의 그룹을 비교해볼 수 있도록 반반씩 붙여주는 바이올린 플롯은 add_trace()side속성과 layout()violinmode 속성으로 설정할 수 있다. side에 ’positive’와 ’negative’로 오른쪽과 왼쪽의 위치를 설정하고 겹쳐 그릴수 있도록 violinmode를 ’overlay’로 설정하면 바이올린 플롯과 박스플롯이 겹쳐져서 그려진다.

p_violin |> 
  add_trace(data = df_취업률_2000 |> filter(과정구분 == '대학과정'),
            type = 'violin', x = ~대계열, y = ~취업률, name = '대학', 
            side = 'positive', box = list(visible = TRUE, width = 0.5), 
            meanline = list(visible = TRUE, color = 'red', width = 1)) |>
  add_trace(data = df_취업률_2000 |> filter(과정구분 == '전문대학과정'), 
            type = 'violin', x = ~대계열, y = ~취업률, name = '전문대학', 
            side = 'negative', box = list(visible = TRUE, width = 0.5), 
            meanline = list(visible = TRUE, color = 'red', width = 1)) |> 
  layout(violinmode = "overlay", 
         title = list(text = '대학 계열별 취업률 분포'), 
         margin = margins)

댓글