dapengde 因为一开始我就考虑到动画问题了,以前见过gganimate包做动画,所以我目前考虑的是用ggplot2来实现。我做了一张超级丑的图,目前不知道如何改进,放出来先,请大伙不吝赐教。
# 加载相关R包
library(nCov2019)
library(tidyverse)
library(RColorBrewer)
# 地图和病毒数据准备
load("./data/ProvinceMapDatas.Rda")
x = get_nCov2019()
virus = data.frame(x[]$name,
cut(x[]$confirm, c(1, 10, 100, 500, 1000, 20000),
labels = c("1-9人", "10-99人", "100-499人", "500-999人", "1000人以上"),
include.lowest = TRUE, right = FALSE, dig.lab = 10))
names(virus) <- c("name", "confirm")
china_map_virus = left_join(df_China, virus, by = c("NAME" = "name"))
china_map_virus_tidy = drop_na(china_map_virus)
# 读取省会城市经纬度数据city、long、lat
city_position = read.csv("./data/city_position.csv")
# 疫情分省数据
ggplot() +
# 中国地图, 包括中国内陆部分和长方形方块内的南海诸岛数据
geom_polygon(data = china_map_virus,
aes(x = long, y = lat, group = interaction(class, group)),
colour = "black", size = 0.25) +
# 为了去掉图例NA,叠加一层,这一层删掉了NAME为空的数据
geom_polygon(data = china_map_virus_tidy,
aes(x = long, y = lat, group = interaction(class, group), fill = confirm),
colour = "black", size = 0.25) +
# 绘制长方形方框
geom_rect(aes(xmin = 124, xmax = 124 + 9.3, ymin = 16 - 0.3, ymax = 16 + 9),
fill = NA, colour = "black", size = 0.25) +
# 绘制长方形方框内的中国南海九段线
geom_line(data = df_NanHaiLine, aes(x = long, y = lat, group = ID),
colour = "grey40", size = 1) +
# 在省会城市位置标注各省名称
geom_point(data = city_position, aes(x = long, y = lat),
colour = "black", size = 1) +
geom_text(data = city_position, aes(x = long, y = lat, label = province),
colour = "black", size = 3, vjust = 0, nudge_y = 0.5) +
# 设置填充颜色
scale_fill_brewer(palette = "Reds",
guide = guide_legend(title = "确诊人数")) +
# 其他设置
coord_map() +
ylim(14, 54) +
ggtitle(paste("全国各省(自治区、直辖市、特别行政区)疫情地图\n", "报告期:", time(x))) +
theme(axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
panel.background = element_blank(),
legend.position = c(0.01, 0.2),
legend.background = element_blank(),
plot.title = element_text(hjust = 0.5,
size = 16,
face = "bold",
color = "black"))