그래프 자동 생성 및 저장하기

개요

반복문을 활용해 여러 지역의 그래프를 자동으로 생성하고 저장하는 방법을 소개합니다. 예제를 통해 1995년부터 2023년까지의 시도별 주민등록인구 추이 그래프를 그려보겠습니다. 이 방법을 사용하면 동일한 형식의 그래프를 각 지역별로 손쉽게 만들고, 일괄적으로 저장할 수 있습니다.

글꼴 및 그림파일 크기 설정

먼저, 필요한 패키지를 로드하고 글꼴과 그림파일 크기를 설정합니다.

# 패키지 로드
library(tidyverse)
library(ggplot2)
library(scales)
library(showtext)

# 글꼴 설정
font_add("kopub", "C:/Users/.../AppData/Local/Microsoft/Windows/Fonts/Kopub dotum medium.ttf")
showtext_auto() # showtext 자동 활성화
showtext_opts(dpi=300) # dpi 300 설정

# 글꼴 크기 설정
theme.size = 10 # pt 단위
text.size = theme.size/.pt # mm 단위

# 그림파일 크기 설정
width <- 145
height <- 70

데이터 준비하기

주민등록인구 데이터를 로드하고, 분석에 적합한 형태로 가공합니다. 데이터를 만 명 단위로 변환하고, 그래프에 표시할 라벨도 추가합니다.

# 데이터 로드
data <- read_xlsx("데이터/주민등록인구_시도_1995-2023.xlsx")

# 데이터 가공
data <- data %>% 
  rename(시도 = 행정구역별,
         주민등록인구수 = `계 (명)`) %>% 
  filter(시도 != "전국") %>% 
  mutate(시점 = as.character(시점),
         주민등록인구수 = as.numeric(주민등록인구수) / 10000,
         라벨 = case_when(시점 %in% as.character(seq(1995, 2023, by = 2)) ~ 주민등록인구수,
                        T ~ as.numeric(NA)))

# 데이터 확인
head(data)
## # A tibble: 6 × 4
##   시도       시점  주민등록인구수  라벨
##   <chr>      <chr>          <dbl> <dbl>
## 1 서울특별시 1995           1055. 1055.
## 2 서울특별시 1996           1042.   NA 
## 3 서울특별시 1997           1034. 1034.
## 4 서울특별시 1998           1027.   NA 
## 5 서울특별시 1999           1026. 1026.
## 6 서울특별시 2000           1031.   NA

그래프 그리기

서울특별시를 예로 들어 1995~2023년 주민등록인구 추이 그래프를 생성합니다. 이 그래프는 geom_linegeom_point를 사용해 데이터 추이를 그리고, geom_text로 특정 값을 표시합니다.

# 그래프 그리기
data %>% 
  filter(시도 == "서울특별시") %>% 
  ggplot(aes(x = 시점, y = 주민등록인구수, 
             group = 시도, color = 시도,
             label = comma(라벨, accuracy = 1))) +
  geom_line(linewidth = 0.4) +
  geom_point(size = 3) +
  geom_text(vjust = -1,
            family = "kopub",
            size = text.size,
            color = "gray10") +
  scale_color_manual(values = "#CD5988") +
  scale_x_discrete(name = "",
                   expand = expansion(mult = 0.05)) +
  scale_y_continuous(name = "주민등록인구 수(만 명)",
                     expand = expansion(mult = 0.2),
                     labels = comma_format()) +
  theme_minimal(base_size = theme.size, base_family = "kopub") +
  theme(
    axis.line = element_line(linewidth = 0.5, color = "gray10"),
    axis.ticks = element_line(linewidth = 0.1, color = "gray10"),
    
    panel.grid.minor = element_blank(),
    
    axis.text = element_text(color = "gray10"),
    axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
    
    legend.title = element_blank(),
    legend.position = "bottom"
    )

반복문으로 17개 시도 그림파일 저장하기

반복문을 사용해 동일한 형식의 그래프를 17개 시도에 대해 자동으로 생성하고 저장합니다. for문을 활용해 각 지역의 데이터를 필터링하고, 그래프를 생성한 후, 지정된 경로에 그림파일로 저장합니다.

지역목록 <- unique(data$시도)

for(지역 in 지역목록){
  p <- data %>% 
    filter(시도 == 지역) %>% # 시도 필터링
    ggplot(aes(x = 시점, y = 주민등록인구수, 
               group = 시도, color = 시도,
               label = comma(라벨, accuracy = 1))) +
    geom_line(linewidth = 0.4) +
    geom_point(size = 3) +
    geom_text(vjust = -1,
              family = "kopub",
              size = text.size,
              color = "gray10") +
    scale_color_manual(values = "#CD5988") +
    scale_x_discrete(name = "",
                     expand = expansion(mult = 0.05)) +
    scale_y_continuous(name = "주민등록인구 수(만 명)",
                       expand = expansion(mult = 0.2),
                       labels = comma_format()) +
    theme_minimal(base_size = theme.size, base_family = "kopub") +
    theme(
      axis.line = element_line(linewidth = 0.5, color = "gray10"),
      axis.ticks = element_line(linewidth = 0.1, color = "gray10"),
      
      panel.grid.minor = element_blank(),
      
      axis.text = element_text(color = "gray10"),
      axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1),
      
      legend.title = element_blank(),
      legend.position = "bottom"
      )
  
  ggsave(
    filename = paste0("아웃풋/1995~2023년 ", 지역, " 주민등록인구 추이.jpeg"), # 파일명에 지역명 추가
    plot = p,
    width = width,
    height = height,
    unit = "mm",
    dpi = 300
    )
  }

이렇게 하면, 폴더에 다음과 같이 그림파일이 저장됩니다!

반복문을 활용하면 동일한 형식의 그래프를 여러 지역에 대해 손쉽게 생성하고 저장할 수 있습니다. 이 방법은 수작업으로 진행하던 작업 시간을 크게 단축시켜 줍니다. 다양한 작업에 반복문을 활용하여 작업 효율성을 높여 보세요!