ggplot2 #3. Useful libraries - GGally, ggpubr, gganimate, esquisse, color packages

Career/R|2023. 1. 2. 14:34

R은 통계를 위한 프로그래밍 언어에 가깝기 때문에, 여타 언어와 마찬가지로 남들이 만들어 둔 여러 유용한 library나 package를 사용할 수 있다는 점이 큰 강점이다. 

 

 

위의 책에서 소개하는 여러 library 중 내가 꼭 기억해두고 싶은 library들을 정리해 보고, 필요한 내용을 추가로 조사하여 기록해두고자 하며, 나의 사고 순서에 따라 진행해보려 한다. 

 

 

 

GGally

내가 처음 다루는 데이터셋의 변수들 간의 관계를 한눈으로 보기에 가장 적합한 그래프는 바로 matrix scatter plot이다. 

 

예를 들어,

plot(mpg)

위와 같이 모든 변수에 대해 행 / 열을 구성하여 변수들 사이의 관계를 볼 수 있다. 

예를 들면 cty ~ hwy, 혹은 cty ~ displ은 선형 관계를 가졌다는 것이 금방 눈에 보인다.

 

이를 ggplot2를 이용하여 쉽게 하는 package가 바로 GGally이다. 

 

GGally 또한 매우 다양한 함수들을 가지고 있으나, 그 중 ggduo나 ggpairs를 많이 사용한다. 

 

ggpairs

pairs()와 유사한 함수로, 데이터셋의 변수들 간의 상관관계를 보는 데에 유용하다. 

ggpairs(iris)

 

GGally documentation에서 설명된 바와 같이, 

변수가 연속변수인지 이산변수인지 combo인지 판단하여 자동으로 그래프를 그려준다. 

또한 동일한 변수 행-열 상에서는 해당 변수가 연속변수 일 경우 density plot을, 이산 변수일 경우 histogram을 그려준다. 

 

 

ggduo

ggduo 또한 거의 비슷하나 

LOWESS, 즉  지역 가중 다항식 회귀 Locally Weighted Polynomial Regression 선이 추가된 것을 볼 수 있다.

 

 

이 함수들도 ggplot2를 바탕으로 하기 때문에 aes함수를 사용할 수 있으며, 데이터의 일부만 사용하여 matrix plot을 보는 것도 가능하다. 

 

ggduo(iris, 
  aes(color=Species), 
  c("Petal.Length", "Petal.Width", "Species"), 
  c("Sepal.Length", "Sepal.Width"))

 

 

 

ggpubr

ggpubr의 documentation을 보면, 

ggplot2을 "출판이 바로 가능하도록" 개량한 버전이라고 설명하고 있다.

ggplot2 publication ready

 

실제로 결과물들을 보면 차트가 더 논문에 어울리는 모양으로 그려지며, 데이터를 다루기에도 편리한 추가 기능을 제공한다. 

https://rpkgs.datanovia.com/ggpubr/reference/index.html

 

Function reference

Developed by Alboukadel Kassambara.

rpkgs.datanovia.com

 

또한 변수의 특징 별로 함수를 잘 분류해 놓아서 굉장히 사용하기 편하다!

 

이외 다수!!

 

ggpubr의 가장 좋은 점은 바로 add와 error.plot parameter이다.

 

논문용 그래프에는 평균, 오차막대, median, 표준편차 등 통계값들을 넣어줘야 하는 경우가 많은데, 이를 아주 간단하게 해결해 준다.

ggboxplot(ToothGrowth, "dose", "len")

일단 이렇게만 해주어도 자동으로 이산변수를 구분하여 깔끔한 그래프를 제공하고, 

 

add parameter와 기타 옵션들을 사용하면 

ggboxplot(ToothGrowth, "dose", "len", add=c("jitter"), color="supp", palette = "Paired")

훌륭한 차트를 금방 얻을 수 있다. 

심지어 palette = "lancet"으로 하면 lancet 출판에 적절한 잡지의 색으로도 변경할 수 있다!

 

 

또 다른 강점으로는 통계검정 결과 또한 간단하게 추가할 수 있는데

이와 같은 parameter들을 이용하면 된다. 

ggboxplot(ToothGrowth, "dose", "len", add=c("jitter"), color="supp", palette = "simpsons") 
  + stat_compare_means()

단 한 줄로, 적절한 통계검정을 선택하고 계산하여 p-value를 그래프에 추가해 준다.

stat_ 관련 함수의 여러 활용법은 documentation에서 아주 자세히 설명하고 있으니 필요할 때 찾아보자.

https://rpkgs.datanovia.com/ggpubr/reference/stat_compare_means.html

 

Add Mean Comparison P-values to a ggplot — stat_compare_means

Add mean comparison p-values to a ggplot, such as box blots, dot plots and stripcharts.

rpkgs.datanovia.com

 

 

 

gganimate

산점도 그래프로 나타낼 수 있는 변수는 최대 4개 정도이다. 

x, y축으로 2개를 할당하고, 

점의 크기, 색으로 2개를 추가적으로 보여줄 수 있다.

 

이때 하나 정도의 정보를 더 보여주고 싶다면? 특히 그것이 시계열 정보라면?

animation을 사용하는 것이 좋은 방법이 된다. 

 

다음의 코드에 배울 점이 많아 남겨두도록 한다.

library(gapminder)
library(gganimate)
library(ggplot2)
library(gifski, av)
library(tidyverse)
data(gapminder)

gapminder
g <- gapminder %>%
  filter(continent == "Asia") %>%
  group_by(year) %>%
  mutate(rank = rank(lifeExp, ties.method = "min")) %>%
  ungroup()

p <- ggplot(g) +
  geom_col(aes(reorder(country, rank), lifeExp, fill=country), 
           alpha = 0.5) +
  theme(legend.position = "none") +
  coord_flip()

ani <- p + transition_time(year, c(1972L, 1982L)) +
  labs(title = 'Year: {frame_time}', x="", y="life expectancy") +
  coord_flip()
animate(ani, fps=1, duration=5, renderer = gifski_renderer())

anim_save("animated bar.gif")

 

 

위의 짧은 코드에

 

  • %>% 연산자의 활용
  • filter 함수의 활용
  • group_by 함수와 ungroup 함수
  • mutate 함수
  • rank 함수
  • gganimate 함수

이 모두 녹아 있다. 

 

잘 응용/활용해 보자.

 

 

Esquisse

이 또한 굉장히 brilliant 한 시각화 tool로서, GUI로 이뤄져 있어 사용법이 굉장히 간단하다. 

library(esquisse)
data(iris)
esquisser()

GUI로 간단하게 작업할 수 있다. 

 

굉장히 좋다!!!

 

 

Color packages

여러 색 조합 패키지가 있으며, 많이 사용되는 것은 다음 세 가지이다.

  • viridis
  • RColorBrewer
  • jcolor

 

각각의 패키지의 특징에 대해서는 필요할 때 알아보도록 하자. 

'Career > R' 카테고리의 다른 글

Network meta-analysis  (0) 2023.01.06
ggplot2 #4. practice - moonBook::acs  (0) 2023.01.03
ggplot2 #2. 추가 요소들  (0) 2023.01.01
ggplot2 #1. 기본 문법  (0) 2022.12.31
R #2. plot 함수, 기타 그래픽 함수  (0) 2022.12.30

댓글()