2015-03-11xxiao513
上期内容回顾上一期我们介绍了空间数据如何在R语言的中sp对象和GIS通常所使用的外部格式数据对象间进行转换。在统一的坐标系基础上,我们能将不同类型的空间数据、地图元素组合在一起进行可视化。
温馨提示:温故而知新,点击文章末尾“阅读原文”查看上期内容~~
本期内容导读本期介绍R传统绘图系统下的空间数据可视化方法,主要基于由sp包提供的Spatial类继承对象的绘图方法。
sp包提供了增强传统R语言绘图系统(plot,image,lines,points等)的绘图方法,以及一个使用Trellis系统(特别是lattice包中的xyplot或levelplot)并能用于条件绘图的spplot方法。
1.绘制点、线、多边形和栅格
以sp包自带的默兹河数据为例,分别绘制点、线、多边形和栅格。
library(sp)
#加载meuse数据集,该数据集为河流地区的重金属污染采样点数据
data(meuse)
#创建采样点的SpatialPointsDataFrame并绘图
coordinates(meuse)<-c("x", "y")
plot(meuse)
title("points")
#将采样点按顺序连接构造SpatialLines并绘图
cc <-coordinates(meuse)
m.sl <-SpatialLines(list(Lines(list(Line(cc)), "line1")))
plot(m.sl)
title("lines")
#加载河流边界数据构造SpatialPolygons并绘图
data(meuse.riv)
meuse.lst <-list(Polygons(list(Polygon(meuse.riv)),"meuse.riv"))
meuse.pol <-SpatialPolygons(meuse.lst)
plot(meuse.pol, col="grey")
title("polygons")
#加载河流区域数据构造SpatialPixels并绘图
data(meuse.grid)
coordinates(meuse.grid)<-c("x", "y")
meuse.grid <-as(meuse.grid, "SpatialPixels")
image(meuse.grid, col="grey")
title("grid")
可视化的四个图形如下:
2.空间对象的叠加显示
可以通过plot的add=TRUE参数实现多种空间对象的叠加显示
#使用add参数实现图形叠加(点和多边形)
plot(meuse)
plot(meuse.pol, add =TRUE)
3.使用spplot的Trellis/Lattice绘制地图
除了sp自带的plot函数绘图外,第二种绘图方式是使用spplot函数来绘图,该函数源于lattice包的绘图功能,同时保持了lattice绘图所有的灵活性还允许向地图中添加地理参考元素。spplot函数能以多个面板(lattice)的方式整合显示图的四维信息:地理坐标x和y,以彩色显示的属性值和面板标示符和多个面板方式显示的时间维信息。以河流数据为例,同时显示河流地区监测站点的4种重金属浓度分布图:
##使用spplot函数进行多面板绘图
library(sp)
#颜色系统选择
library(lattice)
trellis.par.set(sp.theme())
#加载数据
data(meuse)
coordinates(meuse)=~x+y
data(meuse.riv)
#构造河流的SpatialPolygons对象
meuse.sr =SpatialPolygons(list(Polygons(list(Polygon(meuse.riv)),"meuse.riv")))
rv=list("sp.polygons", meuse.sr, fill ="lightblue")
#构造比例尺对象
scale=list("SpatialPolygonsRescale", layout.scale.bar(),
offset=c(180500,329800), scale=500, fill=c("transparent","black"), which=4)
text1 =list("sp.text", c(180500,329900), "0", cex =.7, which=4)
text2 =list("sp.text", c(181000,329900), "500 m", cex =.7, which=4)
#构造指北针对象
arrow=list("SpatialPolygonsRescale", layout.north.arrow(),
offset=c(181300,329800),
scale=400, which=4)
#属性的颜色梯度划分
cuts =c(.2,.5,1,2,5,10,20,50,100,200,500,1000,2000)
#综合所有对象绘图
spplot(meuse, c("cadmium", "copper", "lead", "zinc"), do.log =TRUE,
key.space ="right", as.table =TRUE,
sp.layout=list(rv, scale, text1, text2,arrow),
main="Heavy metals(top soil), ppm", cex =.7, cuts = cuts)
拓展总结
关注我们—官方网站—
—官方QQ群—
R语言中文论坛-2(1000人群):427060123
R语言中文论坛(2000人群,已满):74076289
Biostatistician(500):186701945
—官方微博—
新浪微博:@R语言中文网官网
—官方微信—
微信名:R语言中文网 微信号:rchinanet
点击“阅读原文”回顾第二周:空间数据处理及可视化—R的空间数据导入导出!
回复关键字“0311”获取文中示例中程序文件~
喜欢就点赞鼓励一下,多谢~