R/MarkDown

[R Markdown] Plot과 Table을 한 Row에 그리기

슈퍼짱짱 2022. 3. 16. 14:57
반응형

(Rmarkdown) Positioning table and plot side by side

 

본 포스팅에서는 R 마크다운에서 Plot과 Table을 한 Row에 그리는 방법을 설명한다.

최종 결과는 다음과 같다.

 

 

Plot 다음에 Table이 아래로 나타내지않고 바로 옆에 그려주는 방법이다.

 


 

데이터는 iris 데이터를 사용했고, 

왼쪽에 Plot은 X축은 Sepal.Length, Y축은 Sepal.Width인 2차원 Plot이다. 색은 Species로 나타냈다.

 

오른쪽 Table은 상위 5개에 해당하는 값이다.

 

최종 코드는 다음과 같다.

 

library(tidyverse)
library(ggplot2)
library(gridExtra)
library(grid)
library(xtable)

p1 <- iris %>% 
  ggplot() +
  geom_point(aes(x = Sepal.Length, y = Sepal.Width, col = Species)) +
  theme(legend.position = "none",
        aspect.ratio=0.8)

dat <- head(iris,5)
colnames(dat) <- c("Sepal\nLength","Sepal\nWidth","Petal\nLength","Petal\nWidth","Species")
t1 <- tableGrob(dat, theme=ttheme_minimal(), rows=NULL)

grid.arrange(p1, t1, nrow=1)

 


 

p1에 Plot을 그려주고, t1에 table을 그려준 뒤 grid.arrange()로 합쳐서 하나로 그려준다.

nrow=1로 해주어야 한 행에 그릴 수 있다.

 

(Rmarkdown에서 plot과 table을 한 행에 그려주는데에는 html/css 문법을 직접 활용하여 div로 나눠주는 등 다양한 방법이 있지만 

그와같은 방법은 for loop로 활용하기 어렵다.)

 

rmarkdown에서 for loop를 활용하는 방법은 이전에 포스팅해두었다.

2020.07.31 - [R/MarkDown] - [R Markdown] for loop로 chunk 여러개 만들기

 

[R Markdown] for loop로 chunk 여러개 만들기

R에서 마크다운으로 작업을 하다보면 컬럼만 다른 똑같은 그래프 혹은 테이블을 여러개 만들어야 하는 경우가 있다. 한 두개라면 그냥 복사 + 붙여넣기로 chunk를 새로 만들면 되지만, 그 수가 많

leedakyeong.tistory.com

 


 

plot의 크기는 theme에 aspect.ratio로 조정한다.

 

aspect.ratio는 x축과 y축의 비율을 의미한다.

아래 그래프에서 위 그래프는 ratio=0.8, 아래 그래프는 ratio=1.5로 설정했을 때 결과이다.

 


 

다음으로 table은 컬럼명을 두 줄로 조정해주었다.

이렇게 하지않으면 다음과 같이 컬럼명이 너무 길어서 table이 길어지게되고, plot과 겹치거나 오른쪽이 짤리는 결과가 나오게된다.

 

 

따라서 컬럼명을 \n로 두 줄로 만들어 칸 사이즈를 조절해주었다.

 

외에 글씨 사이즈는 ttheme_mininal()안에 base_size로 조절해 줄 수 있다. default값은 12이다.

tableGrob에 대한 자세한 파라미터들은 여기를 참고하면 된다.

 

 

반응형