본문 바로가기
  • "You can't manage what you can't measure" Peter Drucker
데이터 분석 (with Rstudio)

[Rstudio] ggplot 그래프 분할 생성 (facet_wrap facet_grid)

by Vitaminymc 2023. 12. 18.
반응형

[facet_wrap, facet_grid 함수]

facet_wrap() 및 facet_grid() 함수는 ggplot2로 그린 그래프를  데이터를 기준에 따라  여러 서브플롯으로 나누어 그리는 데 사용된다. 특정 변수에 따라 데이터를 서브플롯으로 분할하여 각 서브플롯에 대해 동일한 그래프를 생성한다.

facet_wrap() 및 facet_grid() 함수는 여러 데이터를 동시에 비교할 수 있도록 시각화할 때 유용하다.

 

[facet_wrap 예제]

facet_wrap()은 하나의 변수를 기준으로 여러 서브플롯을 생성한다.

 

facet_wrap(~category, ncol = 2) :  species변수를 기준으로 서브플롯을 생성

library(palmerpenguins)
library(tidyverse)

data("penguins")  #Dataset 불러오기

#facet_wrap을 사용하여 species에 따라 서브플롯 생성
ggplot(data = penguins, aes(y = body_mass_g, fill = species)) +
  geom_boxplot() +
  scale_fill_manual(values = group_colors) +
  facet_wrap(~species, ncol = 2) +  # ncol은 열의 수를 의미
  labs(title = "Body_mass", x = "Species", y = "Body_mass(g)")

 

facet_wrap(~변수, ncol = 열의 수)

facet_wrap(~category, ncol = 3)

ggplot(data = penguins, aes(y = body_mass_g, fill = species)) +
  geom_boxplot() +
  scale_fill_manual(values = group_colors) +
  facet_wrap(~species, ncol = 3) +  # ncol은 열의 수를 의미
  labs(title = "Body_mass", x = "Species", y = "Body_mass(g)")

 

 

[scales = "free_y" 옵션]

scales = "free_y" : : 서브플롯의 y축 스케일을 각각 독립적으로 조절한다.

ggplot(data = penguins, aes(y = body_mass_g, fill = species)) +
  geom_boxplot() +
  scale_fill_manual(values = group_colors) +
  facet_wrap(~species, ncol = 3, scales = "free_y") + #scales = "free_y"
  labs(title = "Body_mass", x = "Species", y = "Body_mass(g)")

facet_wrap  scales = "free_y"

[labeller 옵션]

서브플롯의 레이블을 사용자가 정의한 레이블로 지정한다.

labeller = labeller(species = c(Adelie = "Group A", Chinstrap = "Group B", Gentoo = "Group C"))

ggplot(data = penguins, aes(y = body_mass_g, fill = species)) +
  geom_boxplot() +
  scale_fill_manual(values = group_colors) +
  facet_wrap(~species, ncol = 2, 
  	labeller = labeller(species = c(Adelie = "Group A", Chinstrap = "Group B", Gentoo = "Group C"))) +
  labs(title = "Body_mass", x = "Species", y = "Body_mass(g)")

 


[facet_grid 예제]

facet_grid()는 두 개의 변수를 기준으로 여러 서브플롯을 생성한다.

# facet_grid를 사용하여 island와 species에 따라 서브플롯 생성
ggplot(data = penguins, aes(y = body_mass_g, fill = species)) +
  geom_boxplot() +
  scale_fill_manual(values = group_colors) +
  facet_wrap(island ~species) +
  labs(title = "Body_mass", x = "Species", y = "Body_mass(g)")

 

facet_grid(island ~species)는 island와 species 두 변수를 기준으로 서브플롯을 생성한다.

이 경우 island가 행, species 가 열에 해당한다.

table(penguins$island, penguins$species)
> table(penguins$island, penguins$species)
           
                 Adelie  Chinstrap Gentoo
  Biscoe          44               0       124
  Dream          56             68           0
  Torgersen     52              0            0

 

[scales = "free" 옵션]

scales = "free": 서브플롯의 스케일을 각각 독립적으로 조절한다.

ggplot(data = penguins, aes(y = body_mass_g, fill = species)) +
  geom_boxplot() +
  scale_fill_manual(values = group_colors) +
  facet_wrap(island ~species, scales = "free") +
  labs(title = "Body_mass", x = "Species", y = "Body_mass(g)")

[labeller 옵션]

label_both : facet의 변수로 사용되는 변수명과 변량값을 붙여서 사용

ggplot(data = penguins, aes(y = body_mass_g, fill = species)) +
  geom_boxplot() +
  scale_fill_manual(values = group_colors) +
  facet_wrap(island ~species, scales = "free", labeller = label_both) +
  labs(title = "Body_mass", x = "Species", y = "Body_mass(g)")

[switch = "both" 옵션]

switch = "both": 행과 열을 바꿀 수 있도록 허용한다.

ggplot(data = penguins, aes(y = body_mass_g, fill = species)) +
  geom_boxplot() +
  scale_fill_manual(values = group_colors) +
  facet_wrap(island ~species, switch = "both") +
  labs(title = "Body_mass", x = "Species", y = "Body_mass(g)")


728x90