민주당, 국민의 힘 경선달력을 제작하는 방식은 calendR
팩키지를 사용해서 PDF 파일로 내보내는 것도 가능하지만… 한국어 관련 내용이 완벽하지 않아 로고와 배경화면을 조합하여 배경을 만들어내고 각당 경선 일정을 calendR
로 제작한다. ggplot
으로 개발이 된 것이라 이를 png 파일로 찍어 magick
팩키지로 이미지 전처리를 통해 최종 결과물을 얻어낸다.
먼저 민주당 2021년 9월 달력을 제작해 보자.
Sys.setlocale(locale = "Korean")
[1] "LC_COLLATE=Korean_Korea.949;LC_CTYPE=Korean_Korea.949;LC_MONETARY=Korean_Korea.949;LC_NUMERIC=C;LC_TIME=Korean_Korea.949"
library(tidyverse)
::loadfonts()
extrafontlibrary(calendR)
# calendR(from = "2021-09-01", # 경선 시작일
# to = "2021-10-31", # End date
# title = "제20대 대통령 선거", # 제목
# subtitle = "민주당 경선 일정",
# start = "M", # 일요일 시작
# font.family = "NanumBarunGothic",
# font.style = "plain",
# mbg.col = 4, # Background color for the month names
# months.col = "white", # Text color of the month names
# special.days = c(daejeon, 5),
# special.col = c("#3EA0E2", "#3EFFFF"),
# text = c("Visit\nhttps://r-coder.com/"),
# text.pos = c(1, 4, 5),
# lty = 0, # Line type
# weeknames = c("월", "화", "수", "목",
# "금", "토", "일"),
# title.size = 20, # Title size
# subtitle.size = 15, # Title size
# orientation = "p", # Portrait orientation
# bg.img = "fig/minju_logo_section.png",
# low.col = "transparent")
rep(NA, 30)
events <-
4] <- "1 대전/충남"
events[5] <- "2 세종/충북"
events[11] <- "3 대구/경북"
events[12] <- "4 강원 + 1차 선거인단"
events[25] <- "5 광주/전남"
events[26] <- "6 전북"
events[# events[31] <- "7 제주"
levels(as.factor(events)) %>% length
color_len <-
::calendR(from = "2021-09-01", # 경선 시작일
calendRto = "2021-09-30", # End date
title = "제20대 대통령 선거", # 제목
subtitle = "민주당 경선 일정",
start = "M", # 월요일 시작
font.family = "NanumBarunGothic",
font.style = "plain",
special.days = events,
special.col = 1:6,
legend.pos = "right",
legend.title = "지역별 순회",
lty = 0,
gradient = FALSE)
이제 민주당 2021년 9월/10월 경선 전체 달력을 제작해 보자.
rep(NA, 61)
events <-
4] <- "01 대전/충남"
events[5] <- "02 세종/충북"
events[11] <- "03 대구/경북"
events[12] <- "04 강원 + 1차 선거인단"
events[25] <- "05 광주/전남"
events[26] <- "06 전북"
events[30 + 1] <- "07 제주"
events[30 + 2] <- "08 부산/울산/경남"
events[30 + 3] <- "09 인천 + 2차 선거인단"
events[30 + 9] <- "10 경기"
events[30 + 10] <- "11 서울 + 3차 선거인단"
events[
calendR::calendR(from = "2021-09-01", # 경선 시작일
p <-to = "2021-10-31", # End date
title = "제20대 대통령 선거 / 민주당 경선 일정", # 제목
# subtitle = "민주당 경선 일정",
start = "M", # 월요일 시작
font.family = "NanumBarunGothic",
font.style = "plain",
special.days = events,
special.col = c("#DBE4EB", "#DBE4EB", "#DBE4EB", "#5787AD",
"#DBE4EB", "#DBE4EB", "#DBE4EB", "#DBE4EB",
"#5787AD", "#DBE4EB", "#5787AD"),
legend.title = "지역별 순회",
legend.pos = "bottom",
lty = 0,
gradient = FALSE)
%>%
p ggsave(filename = "fig/minju_race.png")
민주당 경선 달력의 배경 이미지를 준비해보자.
# 달력 이미지 정보 획득 -- 가로 x 세로
library(magick)
image_read("fig/minju_race.png")
minju_cal <-
image_info(minju_cal)
minju_tbl <-
# 달력을 놓을 백지 이미지 준비 ----------
image_blank(width = minju_tbl$width,
blank_img <-height = minju_tbl$height,
color = "white")
# 민주당 로고 -----------
image_read("fig/minju_logo_section.png")
minju_logo <-
# 배경과 로고 결합 -----------
blank_img %>%
minju_bg <- image_composite(minju_logo %>% image_resize("150%"), offset = "+10+5") %>%
image_transparent(color = "white")
%>%
minju_bg image_write(path = "fig/minju_bg.png")
민주당 경선 달력과 배경 이미지를 결합시키자.
# minju_race_cal_g <- calendR::calendR(from = "2021-09-01", # 경선 시작일
# to = "2021-10-31", # End date
# title = "제20대 대통령 선거 / 민주당 경선 일정", # 제목
# # subtitle = "민주당 경선 일정",
# start = "M", # 월요일 시작
# font.family = "NanumBarunGothic",
# font.style = "plain",
# special.days = events,
# special.col = c("#DBE4EB", "#DBE4EB", "#DBE4EB", "#5787AD",
# "#DBE4EB", "#DBE4EB", "#DBE4EB", "#DBE4EB",
# "#5787AD", "#DBE4EB", "#5787AD"),
# legend.title = "지역별 순회",
# legend.pos = "bottom",
# lty = 0,
# gradient = FALSE,
# bg.img = "fig/minju_bg.png",
# low.col = "transparent")
image_read("fig/minju_race.png")
minju_cal_img <-
minju_cal_img %>%
minju_race_cal_img <- image_composite(minju_bg, operator = "atop")
%>%
minju_race_cal_img image_write("fig/minju_race_cal.png")
이제 국민의 힘 경선 달력을 제작해보자.
rep(NA, 91)
people_events <-
15] <- "1차 컷오프(8명) \n 여론조사 100%"
people_events[30 + 8] <- "2차 컷오프(4명) \n 여론조사 70% + 선거인단 30%"
people_events[61 + 9] <- "대선후보 설출 \n 여론조사 50% + 당원 투표 50%"
people_events[
calendR::calendR(from = "2021-09-01", # 경선 시작일
people_race_cal <-to = "2021-11-30", # End date
title = "제20대 대통령 선거 / 국민의힘 경선 일정", # 제목
subtitle = "\n\n\n\n\n",
start = "M", # 월요일 시작
font.family = "NanumBarunGothic",
font.style = "plain",
special.days = people_events,
special.col = c("#f27178", "#f27178", "#e61e2b"),
legend.pos = "bottom",
legend.title = "지역별 순회",
weeknames = c("월", "화", "수", "목",
"금", "토", "일"),
lty = 0,
title.size = 20,
gradient = FALSE)
%>%
people_race_cal ggsave(filename = "fig/people_race_cal.png")
people_race_cal
국민의힘 로고를 배경 이미지로 놓아 경선 일정 달력을 놓을 수 있도록 준비한다.
image_read("fig/people_cal.png")
people_race_cal <-
image_info(people_race_cal)
people_tbl <-
# 달력을 놓을 백지 이미지 준비 ----------
image_blank(width = people_tbl$width,
people_blank_img <-height = people_tbl$height,
color = "white")
# 국민의힘 로고 -----------
image_read("fig/people_logo.jpg")
people_logo <-
# 배경과 로고 결합 -----------
people_blank_img %>%
people_bg <- image_composite(people_logo %>% image_resize("100%"), offset = "+10+5") %>%
image_transparent(color = "white")
%>%
people_bg image_write(path = "fig/people_bg.png")
마지막으로 로고가 담긴 배경 이미지를 국민의 힘 경선 달력과 합쳐 마무리한다.
image_read("fig/people_race_cal.png")
people_race_cal <-
people_race_cal %>%
people_race_cal_img <- image_composite(people_bg, operator = "atop")
%>%
people_race_cal_img image_write("fig/people_race_cal_img.png")
데이터 과학자 이광춘 저작
kwangchun.lee.7@gmail.com