Lovetoken

저는 개발 취향을 가진 데이터 분석가 Jr. 입니다.

Navigation
 » Home
 » About Me
 » Github

R에서 조건화 그래프(Conditioning plot) 를 출력하기 위한 ggplot2::faect_wrap(), coplot() 함수에 대하여

02 Apr 2018 » R, Data_Visualization



R에서 기본 그래픽스로 제공하는 도구 중
요인별로 구분된 산점도를 그릴때 심플하게 이용할 수 있는 coplot() 함수와 ggplot2 package 에서 coplot() 함수와 비슷한 성격의 faect_wrap() 함수에 대해 알아보고자 한다.

coplot() 도움말을 보면 "Conditioning plots" 즉 "조건화 그래프" 라는 제목으로 사용법이 설명되어 있다.
조건화 그래프는 언제 필요로 할까?

요인이 많은 데이터들을 산점도를 이용하여 시각화 할 때 분간이 쉽지 않아 요인별 특색을 찾기가 어려운 경우가 있다.
예시를 통해 설명을 이어가겠다.



ggplot2 package 에서의 faect_wrap(), faect_grid() 함수

p1 <- ggplot(diamonds, aes(x = carat, y = price, color = cut)) + 
    geom_point(alpha = .5) + 
    labs(color = "")

p1

위 산점도를 간단히 설명하면
세공 상태별 다이아몬드의 가격과, 캐럿(다이아몬드의 무게)의 산점도를 ggplot2::daimonds 데이터셋을 이용해 출력한 결과이다.
결과물만을 보았을 때 세공 상태별 가격과, 캐럿의 분포를 뚜렷하게 확인 하기가 쉽지 않다.
종류가 5가지나 되고 데이터의 수도 많아지면서 난해하진 이 그래프는 캐럿과 가격이 정비례한다는 정보는 인지하기 쉬우나, 세공상태별로 특색의 차이를 인지하기는 매우 어렵다.

세공상태별로의 특색을 눈으로 확인하고 싶다면 아래처럼 요인별로 산점도를 따로 나누는 것도 좋은 방법일 것이다.

p1 + facet_wrap(~ cut, nrow = 5)

첫번째 그래프에서는 알기 쉽지 않던 요인별 분포를 적나라 하게 확인할 수 있게 된다.
가공상태가 좋지 않은 Fair 군의 다이아몬드 가격분포가 다른 군의 분포와 차이가 조금 있다는것을 첫번째 그래프로는 파악할 수 없었을 것이다.

요인별로 패널을 나누어 시각화 하는 스킬들은 도구별로 방법은 다르더라도 기본적으로 제공하는 편이며
위의 예시인 ggplot2 package 에서는 faect_wrap(), faect_grid() 함수등을 이용하여 구현이 가능하다.



coplot() 함수

ggplot2 package 가 아닌 기본 그래픽스에서 조건화 그래프를 그리려면 아래처럼 coplot() 함수를 이용하여 간단하게 볼 수 있다.

coplot(price ~ carat | cut, data = diamonds)

수학에서 조건(given) 을 "bar"(|) 로 표기하는것을 생각하고 formula 를 작성해 이용하면 되겠다.