그래프 자동 생성 및 저장하기
개요
반복문을 활용해 여러 지역의 그래프를 자동으로 생성하고 저장하는 방법을 소개합니다. 예제를 통해 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_line과 geom_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
)
}
이렇게 하면, 폴더에 다음과 같이 그림파일이 저장됩니다!

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