1. Intro
그래프를 그리다 보면, 한번에 표현시켜야 할 일이 생깁니다(특히 논문에 그림 그리실 분들 혹은 보고서 작성시).
다양한 그룹에서 같은 분석결과를 비교할때, 혹은 하나의 그룹에서 분석하고 결과들을 나열하고 싶을 때, 등등 다양한 이유로 한번에 표현하고 싶어합니다.
그래서 이번 포스팅에서는 많이 이용하는 ggplot에서 나온 그래프를 하나의 그림으로 합쳐주는 패키지를 소개해볼까 합니다.
저번 포스팅에서 pair plot을 그리면서 사용한 grid.arrange 이외에도 다른 패키지도 소개하도록 하겠습니다.
본격적으로 패키지 소개를 하기 전에 연습용데이터에 대해서 설명하도록 하겠습니다.
데이터는 iris 데이터를 이용할 것이고 합치고 싶은 그래프들은 다음과 같이 제작하였습니다.
data("iris")
p1<-ggplot(data=iris)+geom_point(aes(x=Sepal.Length,y=Sepal.Width,col=Species))+theme_bw()
p2<-ggplot(data=iris)+geom_boxplot(aes(y=Sepal.Length,x=Species),position = 'identity')+theme_bw()
p3<-ggplot(data=iris)+geom_histogram(aes(y=Sepal.Length,fill=Species),position = 'identity',bins=20,alpha=0.4)+theme_bw()
2. gridExtra package의 grid.arrange function
기본적으로 합치는 경우 ggplot을 하나의 변수에 지정한 다음 grid.arrange에다 넣어주고, ncol로 지정을 해주면 n*m으로 알아서 만들어 줍니다.
grid.arrange(p1,p2,p3,ncol=2)
좀더 논문에 넣을 그림처럼 만들거면 다음과 같이 진행해도 됩니다.
p1_1=p1+labs(tag='A',title = 'iris scatter')
p2_1=p2+labs(tag='B',title = 'iris boxplot')
p3_1=p3+labs(tag='C',title = 'iris histogram')
grid.arrange(p1_1,p2_1,p3_1,ncol=2)
여기서 뭔가 C 부분을 조금더 크게 보여주고 싶다 하면 다음과 같이 진행하면 됩니다.
grid.arrange(arrangeGrob(p1_1,p2_1),p3_1,ncol=2)
# or
grid.arrange(p1_1,p2_1,p3_1,ncol=2,layout_matrix=cbind(c(1,2),c(3,3)))
그래프들의 높이와 너비도 조절이 가능합니다.
grid.arrange(p1_1,p2_1,p3_1,ncol=2,heights=c(1.4,4),widths=c(4,1.4))
물론 합치는 것도 가능합니다.
grid.arrange(p1_1,p2_1,p3_1,ncol=2,heights=c(1.4,4),widths=c(4,1.4),layout_matrix=cbind(c(1,2),c(3,3)))
2. cowplot package의 plot_grid function
다음으로는 cowplot의 plot_grid 를 이용해보겠습니다. 작동방식은 grid.arrange와 유사합니다.
약간의 차이점을 본다면 NULL이 들어가서 공백을 만들 수 있다는 점? 그리고 tag를 자동으로 혹은 수동으로 제작할 수 있다는 점? 입니다.
# tag를 바로 써줄 수 있음. ## plot1
plot_grid(p1,p2,p3,labels = c('A','B','C'))
# auto로 할 경우 tag가 소문자 ## plot2
plot_grid(p1,p2,p3,labels = 'auto')
# AUTO로 할 경우 tag가 대문자 ## plot3
plot_grid(p1,p2,p3,labels = 'AUTO')
# NULL을 받는다. ## plot3
plot_grid(p1,p2,NULL,p3,labels = c('A','B','','C'),ncol=2)
# rel_widths, rel_heights로 높낮이 변경 가능 ## plot4
plot_grid(p1,p2,NULL,p3,labels = c('A','B','','C'),ncol=2,rel_widths = c(1,2))
3. patchwork package의 wrap_plots
patchwork package의 wrap_plots의 경우 찾아보면서 특징을 봐보니 아주 편리한 기능이 있는 패키지입니다.
wrap_plots의 경우 grid.arrange, plot_grid와 유사하게 작동이 가능한데 이패키지의 한가지 특징은 수학 기호로 그림을 조절할 수 있는 점입니다.
# plot 1
p1+p2
# plot 2
(p1+p2)/p3
# plot 3
p3+(p1/p2)
# plot 4
(p1/p2)-p3
tag의 경우 따로 지정을 해줘야하지만 수학 기호로 이렇게 그래프를 추가할 수가 있습니다.
'실용적인프로그래밍 > R' 카테고리의 다른 글
[ggplot2] barplot에서 갭 제거하기 (빈공간제거, 0부터 시작) (0) | 2023.05.18 |
---|---|
[MS,protein] 단백질양 imputation 방법소개 (0) | 2021.12.02 |
[R] scRepertoire에서 오류 해결 방법 (0) | 2021.11.12 |
[R] msa package 설치 에러 해결! (gcc) (0) | 2021.08.23 |
[R error] the given url does not appear to be a valid cran repository (0) | 2021.05.13 |
댓글