编程学习

【R 绘图】2019nCov 疫情地图

2020-02-02  本文已影响0人  caokai001

参考
Y叔公众号:
GuangchuangYu/chinamap package
用R画疫情地图第一波

image.png

检索疫情数据的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 数据框。

2020年2月2日01:36:31

由于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))

geom_map() /coord_map 出现了问题,所以使用geom_ploygon 画图,注意colour放到aes() 之外.火红的湖北(我小随州也攀升全国前五城市了...)

2020年2月2日01:28:43

最后希望疫情早点结束!

参考资料:

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包

上一篇下一篇

猜你喜欢

热点阅读