本帖最后由 R语言微信号 于 2015-2-13 17:02 编辑
2015-02-13xxiao513
微信扫一扫
关注该公众号
朋友圈分享 并回复:0213 即可获取本节程序和R数据文件 背景及概念
R能支持空间数据从导入、转换、处理、分析、可视化和导出的整个分析流程,这使得R非常适合用于空间数据分析。本期内容介绍R中的空间数据类型及其基本的可视化。 首先介绍主要的空间类spatial类是基类,定义了所有子类都必须要有的两个方法,第一个是范围约束,第二个定义了坐标参考系(CSR类)。使用getClass方法获取详细定义和子类。 library(sp) getClass(“Spatial”) 可以看到空间类的子类包括点、线、面、网格数据等。
1. SpatialPoints类 点是最基础的空间数据类,由一系列的坐标点表示,以一个只有经纬度两列的数据为例,我们构造一个spatialpoint对象并可视化: > #查看数据: head(crime)
ID LONG LAT
1 1 -76.65159 39.23941
2 2 -76.47434 39.35274
3 3 -76.51726 39.25874
4 4 -76.52607 39.40707
5 5 -76.51001 39.33571
6 6 -76.70375 39.26605> #创建由坐标点构成的矩阵: data<- crime sp_point <- cbind(data$LONG,data$LAT) colnames(sp_point) <-c("LONG","LAT") head(sp_point) LONG LAT [1,] -76.65159 39.23941 [2,] -76.47434 39.35274 [3,] -76.51726 39.25874 [4,] -76.52607 39.40707 [5,] -76.51001 39.33571 [6,] -76.70375 39.26605
> #定义坐标系,并创建spatialpoints对象 proj<- CRS("+proj=utm +zone=17 +datum=WGS84") data.sp <- SpatialPointsDataFrame(coords=sp_point,data,proj4string=proj) >#查看区域的边界框范围:
bbox(data.sp) min max LONG -76.82981 -76.38756 LAT 39.22488 39.67995 >#绘图: par(mar=c(2,2,0.2,0.2))
plot(data.sp,pch=16, cex=.5, axes=T)2. SpatialLines类 线由一系列的点按顺序连接构成,多条线构成list形成SpatialLines对象,以中国地图边界数据为例,我们构造一个SpatialLines对象,并绘图: >#加载maps包,并从中提取出中国地图 library(maps)
china<- map("world", "china", plot = FALSE)>#将china的map对象转换为SpatialLines对象 p4s <- CRS("+proj=longlat +ellps=WGS84")
SLchina <- map2SpatialLines(china, proj4string = p4s)>#查看这个SpatialLines对象的属性 str(SLchina, max.level = 2)
Formal class 'SpatialLines' [package "sp"] with 3 slots
..@ lines ist of 80
..@ bbox : num [1:2, 1:2] 73.7 18.3 134.7 53.5
.. ..- attr(*, "dimnames")=List of 2
..@ proj4string:Formal class 'CRS' [package "sp"] with 1 slots
可以看到SpatialLines对象由一个lines list、一个边界框、一个坐标系定义组成,使用plot函数绘图: plot(SLchina)
3. SpatialPolygons类。 多边形数据与线数据类似,区别在于由点连成的线是封闭的,即线的首尾点是相同的。我们以2004年美国大选数据为例,构造一个含有属性信息的SpatialPolygons对象,并可视化。这个新对象称之为SpatialPolygonsDataFrame,因为除了空间坐标外,这个对象还以数据框的形式储存了每个多边形的属性,如州名、得票率等。 >#属性数据在绘制时可以利用到,比如将支持Bush的州绘制为红色,将支持Kerry的州绘制为蓝色 cols<- ifelse(election$Bush > election$Kerry,"brown1","cadetblue")
plot(election,col=cols)
4. SpatialGrid和SpatialPixel类。 栅格数据是一种非常规则的数据结构,以网格的形式存放数据,定义好了GridTopology对象(包括左下角单元格中心坐标,单元格大小,和行列数)网格就固定了。例如常见的图像数据,其中每一个像素就是一个网格,像素中存放的数据就是网格的属性。SpatialPixel与SpatialGrid的区别在于,在网格缺失数据多的时候,SpatialPixel可以以只记录非缺失网格属性、坐标和索引的形式存储对象,节约空间。下面我们以R自带的数据集volcano为例,构造一个含有属性的SpatialGrid对象即一个SpatialGridDataFrame,并绘图。 data(volcano)
x <- rep(1:nrow(volcano), each=ncol(volcano))
y <- rep(1:ncol(volcano), times = nrow(volcano))
z <- as.vector(t(volcano))
df<- data.frame(z=z, x=x, y=y)
#转换为SpatialPointsDataFrame
coordinates(df) = c("x", "y")
#转换为SpatialPixelsDataFrame
gridded(df) <- TRUE
#转换为SpatialGridDataFrame
df = as(df, "SpatialGridDataFrame")
#二维可视化
image(df,col=terrain.colors(100), axes=F)
contour(df,levels=seq(from=min(df$z), to=max(df$z), by=10),axes=F, add=T)
下期预告: 下一期,将为大家介绍空间数据的坐标参考系以及导入导出,有了自定义的数据来源,就能更灵活的操作数据和做出自己想要的结果。
关注我们—官方网站— —官方QQ群— R语言中文论坛-2(1000人群):427060123 R语言中文论坛(2000人群,已满):74076289 Biostatistician(500):186701945 —官方微博— 新浪微博:@R语言中文网官网 —官方微信— 微信名:R语言中文网 微信号:rchinanet
|