그룹(집단, 요인) 간의 데이터 분포 형태, 변화 추이 등을 비교 분석하기에 유용한 방법으로 비교하려는 축을 기준으로 면을 분할하여 그래프를 그룹 간 비교하는 방법이 있습니다.

 

Lattice 패키지에서는 Trellis 를 사용하는데요, ggplot2 패키지에서는 facet_grid() 함수facet_wrap() 함수를 사용하여 면 분할을 구현할 수 있습니다.

 

Base Graphics 패키지에서는 par() 함수를 사용해서 면 분할을 지정해줄 수 있습니다만, x축과 y축의 scale이 들쭉날쭉해서 직접적으로 서로 비교하기가 곤란하거나, y축의 min, max 값이 그룹 간 숫자를 모두 감안해서 자동 설정되는 것이 아니다보니 분석가가 미리 y축 값의 범위를 계산해보고, 혹은 그려보고 나서 y축 값을 세팅해줘야 하므로 lattice나 ggplot2 대비 불편합니다.  따라서 집단간 비교를 위한 면 분할이 필요한 경우 ggplot2나 lattice 패키지를 권합니다.

 

MASS 패키지 내 무게(Weight), 고속도로연비(MPG.highway), 차종(Type, 범주형), 생산국가(Origin, 범주형) 의 4개 변수를 사용해서, x축에 무게(Weight), y축에 고속도로연비(MPG.highway), 그리고 면 분할의 기준으로 범주형 변수인 차종(Type)과 생산국가(Origin) 변수를 사용하겠습니다.

 

facet_grid()를 먼저 예제를 보이고, 그 후에 facet_wrap()의 예제를 들겠습니다.  두 함수가 비슷하면서도 조금 다릅니다.  분석가가 필요로 하는 아웃풋 이미지에 맞게 골라서 사용하면 되겠습니다.

 

 

(1) facet_grid()

 

> # facet_grid()
> ggplot(Cars93, aes(x=Weight, y=MPG.highway)) +
+   geom_point(shape=21, colour="black") +
+   facet_grid(Type ~ .)
 

 


 

> ggplot(Cars93, aes(x=Weight, y=MPG.highway)) +
+   geom_point(shape=21, colour="black") +
+   facet_grid(. ~ Type)

 

 

 

 


 

> ggplot(Cars93, aes(x=Weight, y=MPG.highway)) +
+   geom_point(shape=21, colour="black") +
+   facet_grid(Origin ~ Type)

 

 

 

 

 

 

 

(2) facet_wrap()

 

facet_wrap()는 ncol 또는 nrow 로 행 또는 열의 개수를 분석가가 지정할 수 있어서 좋은 점이 있습니다.

 

> # facet_wrap()
> ggplot(Cars93, aes(x=Weight, y=MPG.highway)) +
+   geom_point(shape=21, colour="black") +
+   facet_wrap( ~ Type, ncol=3)

 

 

 


 

> ggplot(Cars93, aes(x=Weight, y=MPG.highway)) +
+   geom_point(shape=21, colour="black") +
+   facet_wrap(Origin ~ Type, ncol=3)

 

 

 


 

> ggplot(Cars93, aes(x=Weight, y=MPG.highway)) +
+   geom_point(shape=21, colour="black") +
+   facet_wrap(Origin ~ Type, ncol=2)

 

 

 

 

많은 도움 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

 

Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 로리너 2017.08.11 16:07 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 포스팅 잘 보고 있습니다.
    질문드릴 것이 하나 있어서 댓글 남겨봅니다..

    몇 가지 요인에 의하여 변동하는 결과값 평균을 비교하기 위해 이러한 모양새로 그래프를 그리고 싶은데요, 이 포스팅과 같은 패키지, 기능을 이용할 수 있나요?

    예를 들어 온도와 산성도, 지속시간을 달리하여 얻어낸 결과값들이 셋 중 어떤 요인에 의하여 더 크게 변화하는지를 시각화하고 싶습니다

    따라해보려 했는데 x축 설정에 애를 먹더군요

    • R Friend R_Friend 2017.08.11 17:43 신고  댓글주소  수정/삭제

      안녕하세요, 로리러님.

      풀려고하는 문제가 정확히 무엇인지 몰라서 답변드리기가 좀 애매한데요, 혹시 이원분산분석으로 풀수 있는 문제이면 아래 포스팅 참고하시기 바랍니다. 중간에 그래프도 포함되어 있습니다.

      http://rfriend.tistory.com/136
      ----------------------------------------------

      그리고 다변량 시각화 하는 필요가 있으시면 블로그의 [다변량 시각화] 구분이 제목에 붙어있는 포스팅도 참고해보시면 좋겠습니다.

      가령, (각 변수 sacle 표준화 후)
      - 평행좌표그림
      - 클리브랜드 점 그래프
      - 3D 산점도

      등을 고려해볼 수 있을거 같습니다.

      -----------------------------------------------

      여러개 변수들의 성대적 (Y값에 대한) 중요도를 시각화 하려면 Random Forest 의 "Feature(Variable) Importance" 도 대안이 될 수있을거 같습니다

  2. 로리너 2017.08.11 17:47 신고  댓글주소  수정/삭제  댓글쓰기

    답변 감사드립니다.

    역시 전달이 힘드네요 ㅎㅎ;

    말씀하신 부분 충분히 알아보겠습니다. 좋은 주말 되십시오