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