R语言使用ggplot2作图,所支持的地图数据对象主要包括两类
sp: SpatialPolygonDataFrame
sf: Simple feature list column
这两株数据对象都可以通过读取shp数据获得
SP将地理数据分割为两大块:描述层和映射层,可以使用rgdal包的readOGR()函数读取数据。
描述层记录各个地理区域的名称、ID、编号、简写、iOS编码等信息,可以通过data@data来获取描述曾数据框。
映射层是每一个行政区域的多边形边界点,按照order排序,按照group分组,多边形分界点信息是一个多层嵌套的list结构,但我们可以通过fortity函数将其装换位数据框。
SP数据再用ggplot2绘制时,需要分离描述层数据和几何映射层数据,并为两者指定连接的id,如果你好要绑定自己的分析数据,那么一共需要合并两次数据。
最大特点hi是,他将每一个行政区划所对应的几何边界点封装成一个list对象,这条记录就像其他普通的文本记录一样,被排列在对应行政区划描述单元中
使用sf包的st_read()函数导入的空间数据对象完全是一个整齐的数据结构,这些行列中包括了描述层和几何多边形的边界点信息。SF对象我们只需要指定一次合并即可,即将描述层和你的分析数据合并,使用sf::st_read()函数读取数据即可得到SF数据对象,其为data.frame对象类型。
library(rgdal) #提供readOGR()函数
library(ggplot2)
library(dplyr)
p<-choose.files()
dataProjected <- readOGR(p) #读取shp文件
data1<-dataProjected@data #提取data数据,该数据为数据框类型,data1包2列括SP_id和type两列
rowid<-rownames(data1) #获取rowname,用于我们后面合并构造key值,其值为0,1,2....10
data1$id<-rowid #此时data1多了一列id,值为0-10
polydata<-fortify(dataProjected) #将SP数据转换为数据框,polydata包括7列long,lat,order,hole,id,group
data_map<-join(polydata,data1,by='id',type='full')#此时data_map包括9列
ggplot()+
geom_polygon(data=data_map, aes(x=long, y=lat, group=group,fill=type),colour="black",size=0.25)
p_country<-choose.files()
dataCountru <- readOGR(p_country)
dataCountry1<-dataCountru@data #dataCountry1有两列,SP_ID和country
dataCountry1$id<-rownames(dataCountry1) #dataCountry1多了一列id,用于后续合并
country_poly<-fortify(dataCountru)
country_map<-join(country_poly,dataCountry1,by='id',type="full")
ggplot()+
geom_polygon(data=country_map, aes(x=long, y=lat, group=group,fill=country),colour="black",size=0.25)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。