【R 绘图】2019nCov 疫情地图
2020-02-02 本文已影响0人
caokai001
参考:
image.png
Y叔公众号:
GuangchuangYu/chinamap package
用R画疫情地图第一波
1.首先获取冠状病毒疫情数据
找到存放数据的链接,readLines读取文件.
require(jsonlite)
require(ggplot2)
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=1580373566110'
x = readLines(url, encoding="UTF-8")
x = sub("^\\d+", "", x)
x = sub("^\\(", "", x)
x = sub("\\)$", "", x)
y = fromJSON(x)
d = fromJSON(y$data)
# 展示总体信息
> d$chinaTotal
$date
[1] "02.02"
$confirm
[1] "11901"
$suspect
[1] "17988"
$dead
[1] "259"
$heal
[1] "269"
# 展示每天人数变化
> d$chinaDayList
date confirm suspect dead heal
1 01.13 41 0 1 0
2 01.14 41 0 1 0
3 01.15 41 0 2 5
4 01.16 45 0 2 8
5 01.17 62 0 2 12
6 01.18 198 0 3 17
7 01.19 275 0 4 18
8 01.20 291 54 6 25
9 01.21 440 37 9 25
10 01.22 571 393 17 25
11 01.23 830 1072 25 34
12 01.24 1287 1965 41 38
13 01.25 1975 2684 56 49
14 01.26 2744 5794 80 51
15 01.27 4515 6973 106 60
16 01.28 5974 9239 132 103
17 01.29 7711 12167 170 124
18 01.30 9692 15238 213 171
19 01.31 11791 17988 259 243
20 02.01 11901 17988 259 269
画图每天确诊病例增长情况
Tips: 注意日期display 形式
###### P1:每天发病人数
## https://blog.csdn.net/nikang3148/article/details/83004306
## 1.geom_bar与geom_col两种形式差异
## 2.as.Date(data,format(%H:%M:%s %d/%m/%Y))
ggplot(d$chinaDayList,
aes(as.Date(date, "%m.%d"),
as.numeric(confirm))) +
geom_col(fill='steelblue')+
ggtitle("2019conv确诊人数的柱状图")
2020年2月2日01:20:22
查看湖北及其其他省份患病人数
###### 湖北省发病人数
d$areaTree[1,2][[1]][1,2][[1]][,1:2]
###### 各省发病人数
dd = d$areaTree[1,2][[1]][,c(1,3)]
df = data.frame(name = dd$name,
confirm = cut(dd$total$confirm, c(1,10,100,500,1000,10000),
include.lowest = T, right=F))
2. 获得中国地图data (基于Y叔chinamap/data 中数据)
也尝试过其他教程,但是有些地图数据没有很好的整理坐标和省份名称关系,于是选择了chinamap
里面内置的data/china.rda
,load 就可以加载china 数据框。
由于chinamap
包下载不下来,手动拷贝部分代码测试.也可以尝试其他地方获取数据.
library(maps)
library(mapdata)
library(maptools)
# load("*.rda") : https://blog.csdn.net/happywlg123/article/details/81388635
# https://raw.githubusercontent.com/GuangchuangYu/chinamap/master/data/china.rda
Data_map <- load("C:\\Users\\hp\\Desktop\\2020-1\\chinaprovinceborderdata_tar_gz\\china.rda")
get_map_china <- function(province='all') {
china <- get("china", envir=.GlobalEnv)
cn <- fortify(china)
## locations <- iconv(china$NAME, from='GBK')
locations = china$NAME
## coords$province <- rep(locations, times=n)
cn$province=locations[as.numeric(cn$id)+1]
if (province == 'all') {
res <- cn
} else {
idx <- grep(province, locations)
if (length(idx) == 0) {
stop("province not matched...")
}
res <- cn[cn$province %in% province,]
}
return(res)
}
# 获得中国地图数据cn
cn <- get_map_china()
2020年2月2日01:24:21
3. 疫情地图
# 保存地图数据与疫情数据一致性,需要保存省份名称一致
cn$province = sub("省", "", cn$province)
cn$province = sub("自治区", "", cn$province)
cn$province = sub("市", "", cn$province)
cn$province = sub("特别行政区", "", cn$province)
cn$province = sub("维吾尔", "", cn$province)
cn$province = sub("壮族", "", cn$province)
cn$province = sub("回族", "", cn$province)
# latitude_longitude <- fortify(x) :类似与x@data
# 合并数据,用于最终画图:
cn2 = merge(cn, df, by.x='province', by.y='name', all.x=TRUE)
cn2 = cn2[order(cn2$order),]
## ggploygon 介绍: https://zhuanlan.zhihu.com/p/37072513
p <- ggplot(data = cn2)+
geom_polygon(aes(x = long, y = lat, fill = confirm,group = group ),colour="grey30")+
# coord_map()+
theme_minimal()+
xlab(NULL) + ylab(NULL)+
labs(title = '2019nCov @wuhan fighting',
subtitle = paste('confirmed cases:', d$chinaTotal$confirm),
caption=paste("accessed date:", d$chinaTotal$date))
## 修改配色:red 梯度色
cols = RColorBrewer::brewer.pal(5, 'Reds')
names(cols) = levels(df$confirm)
p + scale_fill_manual(values=cols, breaks=names(cols))
2020年2月2日01:28:43geom_map() /coord_map 出现了问题,所以使用
geom_ploygon
画图,注意colour
放到aes()
之外.火红的湖北(我小随州
也攀升全国前五城市了...)
最后希望疫情早点结束!
参考资料:
R 画图:
R|ggplot2(三)|coord 系列函数坐标轴转换 : coord_map 将地图变成球状展示(这个我们以后讲到地图再专门说)
R语言可视化——多边形与地图填充 : ggplot2 画地图
手把手教你使用ggplot2绘制中国地图
R语言绘制中国地图,并展示流行病学数据
R for map (1)
R语言和中国地图
利用R绘制漂亮的中国地图(无需通过google获取)
R中.rda文件如何读取 : 注意load("china.rda") 就可以,不需要进行赋值给xxx.
ggplot2都有哪些使用不多但是却异常强大的图层函数 : 讲解geom_ploygon
R 基础语法:
fortily 功能:对于地图数据可视化比较重要
R里面的tryCatch
R语言转换并保存json文件--使用jsonlite包