r语言绘制精美pcoa图_R语言绘制疫情地图

4d24198c3d017cbda7e8ee6ee5d0c6e3.png

窝在家里看代码,偶然间看到Y叔公众号推送的 用R画疫情地图第一波 ,想重复一下,结果其中一个Y叔自己写的包装不上(chinamap),尝试一下用别的方法实现R语言绘制疫情地图。

采用的方法基于R笔记1:ggplot绘制商务图表--中国分省热力地图_刘万祥ExcelPro_新浪博客

数据来源:

  1. 中国各省份、地区的地理信息:可以从 https://pan.baidu.com/share/link?shareid=54856&uk=352462598 链接下载,其中bou2_4p.dbf,bou2_4p.shx和bou2_4p.shp三个文件是我们所需要的,将它们解压在同一个目录下。
  2. 各行政区新冠病毒确诊患者数,用的是Y叔的办法:
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)
write.csv(file='Heatmap_data.csv',d$areaTree[1,2][[1]][,c(1,3)])

产生的csv文件里包含了所需要的各行政区的确诊患者数,疑似患者数,死亡数和治愈的患者数:

39ae878ea3a345d4945d624f60cb237f.png

但是导入的地理信息和疫情信息里面所用的省份名称不一致(NAME一栏):

c8cb5944f0787bab7ae823ee932ee14b.png

为了方面后面合并地理信息和疫情信息表格,构建了对应关系表,并且根据患者数进行分类(Heatmap_data):

aa4dd80bda7692e6b62cc0315e1b91dd.png

根据NAME,合并地理信息和疫情信息:

china_map = readShapePoly("bou2_4p.shp")
x <- china_map@data          
xs <- data.frame(x,id=seq(0:924)-1)
china_map1 <- fortify(china_map) 
china_map_data <- join(china_map1, xs, type = "full")  
china_data <- join(china_map_data, Heatmap_data, type="full") 

合并后的结果:

aca20bfdeb9de682d08e935ad302de55.png

绘图:

p = ggplot(china_data, aes(x = long, y = lat, group = group,fill = Group)) + #按Group上色
  geom_polygon(colour="Black") + coord_map("polyconic")  #polyconic投影方式,防止地理图像的变形

4ceb0103604e6923e1c9002fa20f6e1a.png

删除不必要的元素(灰色背景和横纵坐标等):

p = p + theme(               
    panel.grid = element_blank(),
    panel.background = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    axis.title = element_blank()
  )

8adea2dea0104d9b752075f634863c78.png

修改颜色,感觉Y叔的颜色方案挺好看,我就拿来用了:

p = p + scale_fill_manual(values=c("#FEE5D9","#A50F15","#FB6A4A","#FCAE91","#DE2D26"))
p

7043856c18a6815a8e8a5078a2726c87.png
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值