살다 보면 그래프를 여러 개 이어 붙여 그려야 할 때가 있습니다.
이럴 때 제일 먼저 생각하는 방법은 각각 그래프를 그린 다음 어도비 포토샵 같은 그래픽 프로그램으로 이미지를 붙이는 것.
나쁘지 않은 방식이지만 번거로운 것도 사실입니다.
그래서 R 세상에 'patchwork'(패치워크)라는 패키지가 나왔습니다.
이 패키지 하나만 있으면 정말 황당할 만큼 손쉽게 그래프를 붙여 그릴 수 있습니다.
새로운 패키지를 쓸 때 제일 먼저 할 일은 물론 install.packages() 함수로 설치하고 library() 함수로 불러오기.
#install.packages('patchwork')
library('patchwork')
이어서 원래 이 '최대한 친절하게 쓴 R 시리즈'에서 제일 먼저 하던 작업을 합니다.
네, tidyverse 패키지 불러오기입니다.
#install.packages('tidyverse')
library('tidyverse')
## -- Attaching packages --------------------------------------------------------------------------------- tidyverse 1.3.0 --
## √ ggplot2 3.2.1 √ purrr 0.3.2 ## √ tibble 2.1.3 √ dplyr 0.8.3 ## √ tidyr 0.0.3 √ stringr 1.4.0 ## √ readr 1.3.1 √ forcats 0.3.0
## -- Conflicts ------------------------------------------------------------------------------------ tidyverse_conflicts() -- ## x dplyr::filter() masks stats::filter() ## x dplyr::lag() masks stats::lag()
이번 포스트는 그래프를 그리는 게 목적이 아니라 그래프를 '이어 붙이는' 게 목표니까 새로 그래프를 그리지 않겠습니다.
대신 'ggplot 산점도 위에 회귀선(식) 표시하기(feat. geom_text)' 포스트에서 썼던 그래프를 가져오겠습니다.
아래는 그냥 x축에 1~100을 넣고 y축에는 x값에 6을 곱한 뒤 표준편차(SD) 64가 나오도록 난수를 만들어 더하라는 뜻입니다. (그냥 아무 숫자나 만들라는 뜻입니다.)
set.seed(20190606)
df <- data.frame(x = c(1:100))
df$y <- 6 * df$x + rnorm(100, sd = 64)
이렇게 만든 자료를 가지고 ggplot()로 그림을 그리면 아래와 같습니다.
ggplot(df, aes(x=x, y=y)) + geom_point()
혹시 이런 그림을 그려 보고 싶으신데 어떻게 그리는지 모르겠다 싶으신 분은 '최대한 친절하게 쓴 R로 그래프 그리기(feat. ggplot2)' 포스트를 참고해 보셔도 좋습니다.
이어서 이 그래프(plot)를 p1이라는 변수에 넣겠습니다.
p1 <- ggplot(df, aes(x=x, y=y)) + geom_point()
계속해서 이 그래프에 회귀선을 넣겠습니다.
ggplot(df, aes(x=x, y=y)) + geom_point() + stat_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
마찬가지로 이 그래프를 p2라는 변수에 담아놓도록 하겠습니다.
p2 <- ggplot(df, aes(x=x, y=y)) + geom_point() + stat_smooth()
마지막으로 이 회귀선 선형으로 바꾸겠습니다.
ggplot(df, aes(x=x, y=y)) + geom_point() + stat_smooth(method='lm')
## `geom_smooth()` using formula 'y ~ x'
이제 뭘 해야 할지 아시죠? 이 그래프는 p3에 들어갑니다.
p3 <- ggplot(df, aes(x=x, y=y)) + geom_point() + stat_smooth(method='lm')
여기까지 마치셨으면 이제 patchwork를 알아볼 준비가 됐습니다.
patchwork 사용법은 정말 간단합니다.
그래프를 옆으로 이어 붙이고 싶을 때는 플러스(+), 아래로 이어 붙이고 싶을 때는 슬래쉬(/)를 쓰시면 됩니다.
먼저 p1과 p2를 옆으로 그려보면?
p1 + p2
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
이번에는 위아래로 붙여 보겠습니다.
p1 / p2
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
계속해서 그래프가 세 개일 때는 어떻게 나타나는지 보겠습니다.
p1 + p2를 먼저 쓰고 p3를 나중에 쓰면?
p1 + p2 / p3
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
p1, p2를 위에 놓고 p3를 아래에 놓고 싶을 때는 이렇게 쓰면 됩니다.
(p1 + p2) / p3
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
거꾸로 p1이 위에 있고 p2, p3를 아래로 놓고 싶다면?
p1 / (p2 + p3)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'
## `geom_smooth()` using formula 'y ~ x'
어떻습니까? 정말 황당할 만큼 간단하지 않습니까?
이제 그래프를 이어 붙여 그리실 일이 있을 때는 포토샵 말고 patchwork를 찾아주세요.
그럼 Happy Charting!
댓글,