[R 시각화] ggplot2 튜토리얼 Part1 : ggplot2 소개, 팔레트, 화면분할, 레이어링

수진·2020년 3월 3일
2

R

목록 보기
12/12
post-thumbnail

이 블로그의 가장 첫 글이 ggplot2boxplot 그려보기 였습니다. 이 패키지를 처음 익히고 시간이 지나니 헷갈리더군요. 관련하여 다시 복습하는 차원에서 튜토리얼을 따라 해보고 있습니다. ✍✍✍

튜토리얼은 3개로 나누어져 있고 각 튜토리얼마다 완료하면 전체 요약을 아아주 간단히 정리해보려고 합니다.🙂 오늘은 튜토리얼 Part1인 Introduction To ggplot2 입니다.

튜토리얼 링크

ggplot2 튜토리얼 바로가기

ggplot2란? 🥊

R은 통계 언어로 다양한 패키지에서 데이터 시각화를 제공합니다. 특히 ggplot2 고품질의 쉬운 조작방법으로 사용자들의 많은 💖을 받고 있지요. :-)

ggplot2base Graphics와 구분되는 가장 큰 특징은 아래와 같습니다.

레이어링을 통해 플롯품질을 향상시킬 수 있다.

아래 그림처럼 한번에 플롯을 모두 설정하는 것이 아닌, 레이어를 하나 하나 추가하면서 플롯을 점차적으로 완성시켜 나갑니다. 다양한 레이어들이 있어 원하는 그래프 내역을 조정할 수 있지요.

data.frame만 받는다.

ggplot2는 오직 data frame만 적용됩니다. 일단 gglot(data = dataframe)으로 시작하고, dataframe 내 다양한 변수들을 x, y, legend 로 지정할 수 있습니다.

팔레트와 화면분할 🍴

튜토리얼 실습을 하기에 앞서 필요한 패키지를 받고 관련된 사전 설명이 필요해 보여 따로 정리해보았습니다!

패키지 라이브러리와 예제 데이터 받기

> library(ggplot2) # 플롯
> library(RColorBrewer) # 팔레트
> library(ggpubr) # 화면분할
 
 # midwest counties의 Demographic information 데이터 
> data("midwest", package = "ggplot2")

RColorBrewer 패키지에 대한 간단한 설명

RColorBrewer 패키지는 그래픽에 활용할만한 다양한 색상 팔레트를 제공합니다. 직접 플롯에 들어갈 색을 지정해도 되지만, 이미 여러 색 조합이 조화롭게 만들어진 팔레트를 이용하면 더 빠르게 작업할 수 있겠지요. 🙂

# vbrewer.pal.info는 패키지에 저장되어 있는 객체이다
# 호출을 하면 팔레트에 대한 정보가 불러와진다
# BrBG, PiYG, PRGn 같은 것들이 팔레트 이름이다
> brewer.pal.info
         maxcolors category colorblind
BrBG            11      div       TRUE
PiYG            11      div       TRUE
PRGn            11      div       TRUE
PuOr            11      div       TRUE
RdBu            11      div       TRUE
RdGy            11      div      FALSE
RdYlBu          11      div       TRUE
RdYlGn          11      div      FALSE
Spectral        11      div      FALSE
Accent           8     qual      FALSE
Dark2            8     qual       TRUE
Paired          12     qual       TRUE
Pastel1          9     qual      FALSE
Pastel2          8     qual      FALSE
Set1             9     qual      FALSE
Set2             8     qual       TRUE
Set3            12     qual      FALSE
Blues            9      seq       TRUE
BuGn             9      seq       TRUE
BuPu             9      seq       TRUE
GnBu             9      seq       TRUE
Greens           9      seq       TRUE
Greys            9      seq       TRUE
Oranges          9      seq       TRUE
OrRd             9      seq       TRUE
PuBu             9      seq       TRUE
PuBuGn           9      seq       TRUE
PuRd             9      seq       TRUE
Purples          9      seq       TRUE
RdPu             9      seq       TRUE
Reds             9      seq       TRUE
YlGn             9      seq       TRUE
YlGnBu           9      seq       TRUE
YlOrBr           9      seq       TRUE
YlOrRd           9      seq       TRUE

# 위 모든 팔레트들의 색상표를 확인할 수 있다
> RColorBrewer::display.brewer.all()

# 팔레트 중 특정 하나만 선택하여 확인할 수 있다
# n에는 팔레트 내 색상의 수(5로 하면 왼쪽부터 5개), name은 팔레트 이름을 입력
> RColorBrewer::display.brewer.pal(n = 5, name = "Pastel1")

화면 분할

기본플랏은 par() 함수를 통해 화면 분할이 가능하죠. 그런데 ggplot2는 안돼요. 저는 계속 왜 안되지 했어요.
대신, ggplot2ggarrange()[in ggpubr], plot_grid() [in cowplot], grid.arrange() [in gridExtra] 을 사용하면 됩니다. 저는 이번 포스팅에선 ggarrange()[in ggpubr]를 사용했어요.

참고 자료 > 바로가기
Arrange on one page 부분

# 예시
> gpubr::ggarrange(플롯명1, 플롯명2, ... , ncol = 2, nrow = 2)

튜토리얼 실습 🎢

사실 파트1의 튜토리얼은 어려운 수준이 아니기 때문에 짧게 정리하겠습니다.

ggplot2로 차곡차곡 레이어 쌓기

튜토리얼대로 사용한 산점도로 플롯을 만들었습니다.

midwest %>% 
# midwest 데이터 지정
  ggplot2::ggplot(mapping = aes(x = area, y = poptotal)) +
  # x는 area, y는 poptotal로 지정 
  ggplot2::geom_point(aes(col = state), size = 3) +
  # 산점도 그리기, 산점도의 색상은 state 변수에 따라 다르게, size는 3으로 지정
  ggplot2::geom_smooth(method = "lm", col = "red", size = 0.5, fill = "pink") +
  # 산점도 위에 선형 레이어 추가
  # lm => Linear Model
  ggplot2::coord_cartesian(xlim = c(0, 0.1), ylim = c(0, 1000000)) +
  # 이상치로 인해 데이터가 잘 보이지 않아 그래프 확대
  # xlim & ylim => x 및 Y축을 기준으로 확대할 min, max 값
  ggplot2::labs(title = "Area VS Populatein", y = "Population", x = "Area", subtitle = "Midwest Demographics") +
  # 라벨링
  ggplot2::theme(legend.position = "NONE") + 
  # 범례지움
  ggplot2::theme_classic() + 
  # 그래프 배경 테마 지정
  ggplot2::scale_colour_brewer(palette = "Set3") +
  # 그래프 색상(산점도의 점 색상)
  ggplot2::scale_x_continuous(breaks = seq(from = 0, to = 0.1, by = 0.01), labels = letters[1:11]) +
  # x축의 표시 구간(=>breaks)과 라벨(=>labels)
  ggplot2::scale_y_continuous(breaks = seq(from = 0, to = 1000000, by = 200000), labels = function(x) {paste0(x/1000, "K")})
  # y축의 표시 구간과 라벨

레이어 별 변화 모습

위 레이어링이 진화되는 각각의 플랏을 a ~ i로 저장하여 화면분할하여 표현해보았습니다.

# 테마는 레이어링 하지 않고 미리 셋팅 가능
> ggplot2::theme_set(theme_classic())
 
# 각 레이어링을 a...i 객체에 저장하기
~생략~

# 화면 분할과 그래프 할당
# (귀찮아서 3x3 으로 했더니 그래프가 잘 안보여서 1x3으로 나눠서..)
> ggpubr::ggarrange(a, b, c, ncol = 1, nrow = 3)
> ggpubr::ggarrange(d, e, f, ncol = 1, nrow = 3)
> ggpubr::ggarrange(g, h, i, ncol = 1, nrow = 3)



마무리

공부 끝!

profile
안녕하세요! 이것저것 하고 있습니다 👩‍🔧

0개의 댓글