-
Notifications
You must be signed in to change notification settings - Fork 164
/
example.R
114 lines (92 loc) · 3.45 KB
/
example.R
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
111
112
113
require(nCov2019)
y <- load_nCov2019(lang = 'en', source='github')
d = y['global']
require(dplyr)
require(shadowtext)
dd <- filter(d, time == time(y) & country != "China") %>%
arrange(desc(cum_confirm))
dd = dd[1:40, ]
dd$country = factor(dd$country, levels=dd$country)
cols <- rev(RColorBrewer::brewer.pal(10, "RdYlGn"))
dd$angle = 1:40 * 360/40
label_cut = 700
i = dd$angle >= 180 & dd$cum_confirm > label_cut
dd$angle[i] = dd$angle[i] + 180
j = dd$angle < 180 & dd$cum_confirm < 1000
dd$angle[j] = dd$angle[j] - 90
dd$vjust = 1
dd$vjust[i] = 0
dd$vjust[j] = 0.5
dd$y = dd$cum_confirm *.8
dd$y[j] = dd$y[j] * .7
require(ggplot2)
p <- ggplot(dd, aes(country, cum_confirm, fill=cum_confirm)) +
geom_col(width=1, color='grey90') +
geom_col(aes(y=I(5)), width=1, fill='grey90', alpha = .2) +
geom_col(aes(y=I(3)), width=1, fill='grey90', alpha = .2) +
geom_col(aes(y=I(2)), width=1, fill = "white") +
scale_y_log10() +
scale_fill_gradientn(colors=cols, trans="log") +
geom_shadowtext(aes(label=paste(country, cum_confirm, sep="\n"),
y = y, angle=angle,
vjust=vjust),
data=function(d) d[d$cum_confirm > label_cut,],
size=3, colour = "white", bg.colour="black",
fontface="bold") +
geom_text(aes(label=paste0(cum_confirm, ", ", country),
y = max(cum_confirm) * 2,
angle=angle+90),
data=function(d) d[d$cum_confirm < label_cut,],
size=3, vjust=1) +
coord_polar(direction=-1) +
theme_void() +
theme(legend.position="none")
p1 = ggplotify::as.ggplot(p, scale=1.2)
require(dplyr)
require(ggplot2)
require(shadowtext)
require(nCov2019)
d <- load_nCov2019()
dd <- d['global'] %>%
as_tibble %>%
rename(confirm=cum_confirm) %>%
filter(confirm > 100 & country != "China") %>%
group_by(country) %>%
mutate(days_since_100 = as.numeric(time - min(time))) %>%
ungroup
breaks=c(100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000)
p2 <- ggplot(dd, aes(days_since_100, confirm, color = country)) +
geom_smooth(method='lm', aes(group=1),
data = . %>% filter(!country %in% c("Japan", "Singapore")),
color='grey10', linetype='dashed') +
geom_line(size = 0.8) +
geom_point(pch = 21, size = 1) +
scale_y_log10(expand = expansion(add = c(0,0.1)),
breaks = breaks, labels = breaks) +
scale_x_continuous(expand = expansion(add = c(0,1))) +
theme_minimal(base_size = 14) +
theme(
panel.grid.minor = element_blank(),
legend.position = "none",
plot.margin = margin(3,20,3,3,"mm")
) +
coord_cartesian(clip = "off") +
geom_shadowtext(aes(label = paste0(" ",country)), hjust=0, vjust = 0,
data = . %>% group_by(country) %>% top_n(1, days_since_100),
bg.color = "white") +
labs(x = "Number of days since 100th case", y = NULL,
title = "Confirmed COVID-19 cases",
subtitle = time(d))
library(chinamap)
x <- get_nCov2019(lang = 'en')
cn = get_map_china()
cn$province <- trans_province(cn$province)
p3 <- plot(x, region = 'china', chinamap = cn,
continuous_scale = FALSE,
palette = 'Blues', font.size = 2) +
theme_minimal(base_size=14)
require(cowplot)
pp <- plot_grid(p2, p3, ncol=1, labels=c("B", "C"),
rel_heights=c(.7, 1))
g <- plot_grid(p1, pp, ncol=2, rel_widths=c(1.2, 1), labels=c("A", ""))
ggsave(g, filename = "nCov2019.jpg", width=16, height=11)