library(patchwork)
library(ggplot2)
library(showtext)
Loading required package: sysfonts
Loading required package: showtextdb
showtext_auto()
때로는 여런 그래프를 한 면에 배치할 필요가 있다. patchwork
패키지를 사용하면 여러 그래프를 쉽게 배치할 수 있다.
먼저 patchwork
패키지를 (설치하고_ 불러온다.
library(patchwork)
library(ggplot2)
library(showtext)
Loading required package: sysfonts
Loading required package: showtextdb
showtext_auto()
ggplot2
패키지를 사용하여 다음 5개의 그래프를 생성하고, 이것을 patchwork
패키지를 사용하여 배치하고자 한다.
# 예시 데이터
data(mtcars)
# 그래프 생성
<- ggplot(mtcars) + geom_point(aes(mpg, disp))
p1 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear))
p2 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl)
p3 <- ggplot(mtcars) + geom_bar(aes(carb))
p4 <- ggplot(mtcars) + geom_violin(aes(cyl, mpg, group = cyl)) p5
+
, -
, /
, ()
연산자를 사용한 배치+
연산자는 그래프를 가급적 사각형 형태로 자동으로 배치한다. 디폴트는 행 우선으로 배치한다.
+
연산자를 사용하는 경우 (그래프들이 합쳐지는데) 마지막 그래프가 활성(active) 그래프가 된다.
plot_layout()
함수를 붙여서 그래프의 배치 형태를 지정할 수 있다. ncol
인자를 사용하여 열의 개수를 지정할 수 있다. byrow = FALSE
로 설정하면 열 우선으로 배치된다. widths
인자를 사용하여 폭의 비를 지정할 수도 있다.
+ p2 + p3 + p4 + p5 + plot_layout(ncol = 3) p1
+ p2 + p3 + p4 + p5 + plot_layout(ncol = 3, byrow = FALSE) p1
+ p2 + p3 + p4 + p5 + plot_layout(ncol = 3,
p1 byrow = FALSE, widths = c(1, 2, 1))
plot_annotation()
함수를 사용하여 합쳐진 전체에 대한 제목, 부제목, 캡션을 추가할 수 있다.
+ p2 + p3 + p4 + p5 +
p1 plot_layout(ncol = 3, byrow = FALSE, widths = c(1, 2, 1)) +
plot_annotation(title = "여러 그래프 배치하기",
subtitle = "patchwork 패키지 사용",
caption = "출처: ggplot2 예시 데이터 mtcars")
-
연산자도 있다. 비니에트에서는 빼기라기 보다는 대쉬(-
)라고 생각하는 것이 좋다고 한다. +
연산자와 다른 점을 확인해 보자.
# 마지막 p3 그래프를 배치하고 나서 왼쪽 p1 + p2가 배치
+ p2 - p3 p1
# 4 그래프가 마지막에 배치되고, 나머지 p1 + p2 + p3 그래프가 왼쪽에 균등하게 배치
+ p2 + p3 - p4 p1
/
연산자는 그래프를 아래 위로 쌓아서 배치한다. 다음 결과를 보면 p2
가 p3
위에 배치되고 이것이 하나의 단위로 묶이는 것을 확인할 수 있다.
|
는 수평으로 배치한다. ()
는 수학의 괄호처럼 하나의 단위로 묶는다.
plot_annotation()
함수 사용plot_annotation()
함수는 다음과 같은 기능을 제공한다. 전체 그래프의 제목, 부제목, 캡션을 추가하거나, 번호 같은 태그를 지정할 수 있다. 전체적으로 테마를 지정할 수도 있다.
굳이 모든 내용을 설명하지는 않았지만 이 패키지를 사용하면 동시에 여러 그래프를 배치해야할 필요가 있을 경우에는 매우 유용함을 잊지 말자. 웹사이트에 자세한 내용이 있으니 참고하자.