当前位置: 首页 > 工具软件 > SF1R > 使用案例 >

R语言中sf对象与中国地图的合成(用大陆地图和台湾省地图合成中国地图)

赖诚
2023-12-01

什么是sf对象?

本人最近看国内博文,很少有介绍R语言中sf对象的文章。而sf对象是R语言地图绘制的重要工具,在国外已经介绍和使得非常普遍了,国内现在这样让我这个学习者查资料很不方便,很多时候不得不想办法看国外网站内容,网速慢不说,还要花monney。再加上我每次想下载CSDN网站上的资源时,都苦于没有c币,所以想来写写,希望能有意外收获。

那么,到底什么是sf对象呢?sf即simple feature object。相比于sp,其操作更为简单,更适合于初学者。简单地说,sf对象就是符合一种标准的数据格式的数据集。这种标准可以方便地将图形对象纳入R语言内部进行管理。地图是一种图形对象。地图这种图形对象可以使用sf对象的格式,纳入R语言内部,构建一种data.frame,或tibble等。这样,地图对象就可以像一般的R语言数据来进行管理了。一般来说,地图对象都不是普通用户手工输入,而是从其它文件中读入。可以用st_read函数来读入。sf对象读入后,包含有geom变量(可以作为变量看待,但其实它是一个复杂的表(list),表的底层是一个个矩阵,这些矩阵描述了地图多边形如何绘制而成。所以一般我们不用去管这些矩阵的具体内容。)
程序代码例子如下:

library(sf)
mainland=st_read(“.shp文件名”)
taiwanprovince=st_read(“.shp文件名”)

这样我们就读入了两个图形对象,下一步就是对这两个图形(sf)对象进行合并,然后就可以绘制完整的中国地图了(顺便说一下,有些外国毛子经常把台湾省地图单独列为一国,很气愤!!这样我们不得不经常将大陆的地图和台湾省的地图合并起来作图)。合并的方法和一般的数据合并没有区别。还是用,如:rbind、或left_join等命令来完成。如接上例,我们可以用left_join来合成中国地图全图。

library(tidyverse)
chinamap <- left_join(mainland, taiwanprovince,by=c("country"="iso_a2"))
#变量名称根据你的文件具体确定

接下来我们就可绘制中国地图了。比如下面的命令绘出中国地图的外形及省区框。

library(tmap)
tm_shape(chinamap)+tm_polygons()

然后,可以将当前新冠肺炎疫情数据合并到数据框中,如confirmed变量代表我们收集的数据,则可以很方便地绘制出疫情图:

tm_shape(chinamap)+tm_polygons(color="confirmed")

这样,一个简单的有意义的中国地图就绘出来了。当然,还可以继续完善这个图。因为现在很晚了,下次如果有机会再来修改。本文写作的目的是希望能够抛砖引玉,希望国内大牛多介绍这方面的内容!

 类似资料: