generated from rstudio/bookdown-demo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
hello-world.Rmd
111 lines (83 loc) · 4.32 KB
/
hello-world.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
```{r setup, echo = FALSE, message = FALSE}
source("_common.R")
library(tidyverse)
library(patchwork)
library(lubridate)
```
# 헬로우 월드 {#hello-world}
## 나폴레옹 러시아 침공 {#napoleon-invasion}
나폴레옹 황제가 프랑스를 통치할 때 1812년 최대 전성기를 구가했다.
![](assets/images/about_napoleon.png){width=100%}
최대 전성기를 구가하던 1812년 나폴레옹은 러시아 침공을 감행했다. 나폴레옹의
러시아침공은 데이터 시각화의 역작을 남기는 계기가 되기도 했다.
미나르는 프랑스의 러시아 침공을 군더더기 없이 시작부터 폐퇴하여 돌아온 과정까지 간략하게 표현했다.
![](assets/images/Minard.png){width=100%}
미나르 데이터 시각화의 지명을 자세히 보면 프랑스의 러시아 침공에 대해 대략적으로
인식하고 있는 것과 다소 차이가 난다. 통상 프랑스 수도 파리에서 나폴레옹 대군이
출발하여 러시아 모스코바에서 한동안 머물다가 다시 수도 파리로 돌아와서 황제에서
끌어내려져 엘바섬으로 위배를 떠난 것으로 알려져 있지만 실제 미나르가 데이터에
기반하여 제작한 시각화 그래프에는 진실이 담겨있다. [^quora]
![](assets/images/minard-actual-map.png){width=100%}
[^quora]: [Alexey Tereshchenko, "Why did Napoleon’s Russian campaign end in failure?", Quora](https://theeducationalblog.quora.com/Why-did-Napoleon-s-Russian-campaign-end-in-failure-http-www-ryin-main-quora-com-Why-did-Napoleon-s-Russian-campaign)
## 시각화 {#napoleon-viz}
```{r minard-russian-invasion, eval = FALSE}
library(HistData)
library(tidyverse)
library(gridExtra)
library(ggrepel)
data(Minard.troops)
data(Minard.cities)
data(Minard.temp)
source("../../../swc/sungnam-report/R/theme_election.R", encoding = "UTF-8")
levels(Minard.cities$city) <- c("Bobr", "Chjat", "Dorogobouge", "Gloubokoe", "Kowno", "Malo-Jarosewii",
"Minsk", "Mohilow", "Moiodexno", "Mojaisk", "모스코바", "Orscha",
"Polotzk", "Smolensk", "Smorgoni", "Studienska", "Tarantino",
"Wilna", "Witebsk", "Wixma")
# 진군 퇴각 군대와 도시명
breaks <- c(1, 2, 3) * 10^5
plot_minard <- Minard.troops %>%
ggplot(aes(x = long, y = lat)) +
geom_path(aes(size = survivors, colour = direction, group = group),
lineend = "round", linejoin = "round") +
geom_text(aes(label = city), size = 4, data = Minard.cities) +
scale_size("생존병사수", range = c(1, 10),
breaks = breaks, labels = scales::comma(breaks)) +
scale_color_manual("진격방향",
values = c("grey50", "red"),
labels=c("진격", "후퇴")) +
coord_cartesian(xlim = c(24, 38)) +
labs(x = NULL,
y = "경도",
title = "나폴레옹 러시아 침공",
subtitle = "1812년 6월 24일 ~ 1813년 1월 5일") +
theme_election() +
theme(legend.position=c(.8, .2), legend.box="horizontal")
# 러시아 침공 월별 기온
plot_temp <- Minard.temp %>%
mutate(date = case_when(str_detect(date, "Oct") ~ str_replace(date, "Oct", "10월"),
str_detect(date, "Nov") ~ str_replace(date, "Nov", "11월"),
str_detect(date, "Dec") ~ str_replace(date, "Dec", "12월"),
TRUE ~ "미상")) %>%
mutate(date = glue::glue("{date}일")) %>%
mutate(date = ifelse(date == "미상일", "미상", date)) %>%
ggplot(aes(long, temp)) +
geom_path(color="grey", size=1.5) +
geom_point(size=2) +
geom_text_repel(aes(label=glue::glue("{date}")) ) +
xlab("위도") + ylab("기온") +
coord_cartesian(xlim = c(24, 38)) +
theme_bw()
# 러시아 침공 그래프와 기온 그래프 결합
minard_g <- grid.arrange(plot_minard, plot_temp, nrow=2, heights=c(3,1))
# 미나드 그래프 PNG 파일 저장
ggsave( glue::glue("assets/images/나폴레옹_러시아.png") ,
minard_g,
device = ragg::agg_png,
width = 297, height = 210, units = "mm", res = 600)
```
![](assets/images/나폴레옹_러시아.png){width=100%}
## 참고서적 {#references}
영어로 참고할 오픈 데이터 시각화 교재
- [@healy2018data]
- [@dougherty2021hands]
- [@wilke2019fundamentals]