1 팩키지와 스티커1

R 팩키지는 GitHub에 공개된 것을 포함할 경우 공식적으로 수만개에 이르는 것으로 추산된다. 현재, R/Tidyverse 기반 데이터 과학 서비스와 제품은 대부분 수많은 팩키지를 조합하여 개발되고 있다. 미래의 나도 재현가능하도록 작성된 R 코드와 마크다운 문서를 볼 때 스티커를 조합시켜 시각화하는 것도 단순히 library() 혹은 require() 함수를 호출하는 것보다 큰 의미가 있을 듯 싶다.

2 stickr 팩키지

가장 먼저 스티커 팩키지가 개발되어 있어 stickr 를 활용하는 방식을 먼저 살펴보자. stickr 팩키지는 https://github.com/rstudio/hex-stickers 뿐만 아니라 GitHub 저장소의 R 육각형 스티커를 이용할 수 있는 장점이 있다.

2.1 다운로드 방식

가장 먼저 stickr 팩키지를 사용해서 tidyverse 로고를 로컬 컴퓨터에 저장하고 나서 이를 magick 팩키지를 사용해서 시각화하는 방식을 살펴보자.

# install.packages("stickr")
library(stickr)
library(tidyverse)

stickr_get("tidyverse", view = FALSE, destfile = "fig/tidyverse.png")
[1] "fig/tidyverse.png"
magick::image_read("fig/tidyverse.png") %>% 
  magick::image_resize("150x150")

2.2 R마크다운 문서 직삽입

R마크다운 문서에 직삽입하는 방법으로 stickr_insert 함수를 제공한다. stickr_insert 함수는 knitr 팩키지 include_graphics 함수를 사용하기 때문에 include_graphics 함수의 특성을 그대로 반영할 수 있다. R 코드 덩어리의 out.width = "20%"와 같은 인자값을 조정하여 크기를 조정한다.

stickr_insert("tidyverse", dpi = 300)

3 다수 스티커

스티커가 하나가 아니고 다수인 경우 purrr 팩키지 내장된 함수를 사용한다.

pkgs <- c("tidytuesdayR", "tidyverse", "dplyr", "ggplot2", "usethis")
destfile <- glue::glue("{here::here()}/fig/{pkgs}.png")

# destfile <- glue::glue("{here::here()}/fig/{pkgs}.png")
# pkgs_filename <- glue::glue("{pkgs}.png")
# pmap_list <- list(name = pkgs, destfile = destfile, filename = pkgs_filename)
# pmap(pmap_list, stickr_get, view = FALSE)

map2(pkgs, destfile, stickr_get, view = FALSE)
[[1]]
C:/docs/art/fig/tidytuesdayR.png

[[2]]
C:/docs/art/fig/tidyverse.png

[[3]]
C:/docs/art/fig/dplyr.png

[[4]]
C:/docs/art/fig/ggplot2.png

[[5]]
C:/docs/art/fig/usethis.png

R 스티커 이미지가 .png 파일로 다운로드 되었기 때문에 이를 조합하여 크기를 통일시키고 일렬로 쭉 배열시킨다.

library(magick)

pkgs_img <- map(destfile, image_read) %>% 
  image_join(.)

pkgs_img %>% 
  image_resize(geometry = "150x150") %>% 
  image_append(stack = FALSE)

4 팩키지 → 그림 한장

팩키지 목록을 쭉 넣게 되면 한장의 그림으로 시각화하는 함수를 제작해 보자.

downloaded_pkg <- map(pkgs, stickr_insert)

map(downloaded_pkg, image_read) %>% 
  image_join(.) %>% 
  image_resize(geometry = "150x150") %>% 
  image_append(stack = FALSE)

크기를 조정하는 매개변수를 추가하여 함수로 만들어서 유연하게 시각화하는 함수를 제작한다.

display_pkgs <- function(pkgs, geometry = "150x150") {

  downloaded_pkg <- map(pkgs, stickr::stickr_insert)
  
  pkgs_img <- map(downloaded_pkg, magick::image_read) %>% 
    magick::image_join(.) %>% 
    magick::image_resize(geometry = geometry) %>% 
    magick::image_append(stack = FALSE)
  
  return(pkgs_img)
}

new_pkgs <- c("sf", "tidytext", "tensorflow")

display_pkgs(new_pkgs, "100x100")

5 스티커 만들기

hexSticker 팩키지를 활용하여 R 육각형 스티커를 제작할 수 있다. hexmake를 Shiny 앱으로 제공하기도 하기 때문에 GUI를 사용해서 쉽게 제작도 가능하다.

5.1 이미지 제작

먼저 Seoul R Meetup에 들어갈 이미지를 적당한 것을 찾아서 로고에 들어갈 수 있도록 작업을 수행한다. 광화문이 들어간 이미지는 좋은데 배경화면이 검은색이라 이것을 R 스티커에 들어갈 배경색과 동일하게 맞춘다.

## 이미지 가져오기 -----

logo_raw_img <- image_read("fig/Gwanghwamun.jpg")
logo_raw_img %>% 
  image_resize("200x200")

logo_img <- logo_raw_img %>% 
  image_transparent(color = "#000000", fuzz = 3) %>% 
  image_background("#1881C2")

logo_img %>% 
  image_write("fig/seoul_logo.png")

logo_img %>% 
  image_resize("200x200")

5.2 스티커 제작

폰트 글꼴 설정해 주고 hexSticker 팩키지는 글꼴로 showtext를 사용하기 때문에 showtext에 맞춰 글꼴을 Google Fonts - Korean 웹사이트에서 showtext 팩키지에 사용될 한글 폰트를 다운로드 받아 설치한다.

스티커 제작에 필요한 관련 정보와 크기를 조정해서 로고를 제작한다.

# remotes::install_github("GuangchuangYu/hexSticker")
library(hexSticker)
library(showtext)

## 글꼴 설정 -----
# font_add_google('Cute Font', 'cutefont')
# font_add_google('Noto Sans KR', 'notosanskr')
# font_add_google('Nanum Pen Script', 'nanumpen')
# font_add_google('Gaegu', 'Gaegu')
# font_add_google('Gugi', 'Gugi')

showtext_auto()

## 이미지 설정 -----
img_url <- "fig/seoul_logo.png"

## 스티커 제작 -----
sticker(subplot  = img_url, 
        package  = "서울 R 미트업", 
        p_family = "Gugi",
        p_size   = 20, 
        s_x      = 1, 
        s_y      = .75, 
        s_width  = .6,
        url      = "https://tidyverse-korea.github.io/seoul-R/",
        u_size   = 3,
        filename = "fig/test_sticker.png")

image_read("fig/test_sticker.png") %>% 
  image_resize(geometry = "500x500")

 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com