找回密码
 立即注册
查看: 5322|回复: 6

空间数据专题|第五周:空间数据处理及可视化—空间数据交互

[复制链接]
发表于 2015-3-26 15:53:01 | 显示全部楼层 |阅读模式
本帖最后由 R语言微信号 于 2015-3-26 15:55 编辑

空间数据专题|第五周:空间数据处理及可视化—空间数据交互



xxiao513R语言中文网


上期内容回顾[size=1em]

上一期我们介绍了R下的四种专题地图的可视化方法,通过R进行静态地图的绘制已经相对成熟和方便,但有时我们需要识别地图中的某个点或者区域的信息,亦或动态的选择数据,调节可视化参数来达到与地图进行交互的目的。通过交互,能够更便捷的查看特定信息以及达到最优的可视化效果。
[size=1em]温馨提示:温故而知新,点击文章末尾“阅读原文”查看上期内容~~每期都是干货!

[size=1em][size=1em]
本期内容导读本期将为大家介绍两种R语言绘图交互的方法。

1.基本图形的交互
R语言的传统绘图方法和lattice绘图系统与图形的交互性,相对于专门用于数据交互的软件或专业的GIS工具而言显得十分有限。其主要的功能集中在用鼠标单击的形式显示对应位置信息。

底图显示有两个用于与图形设备(如显示器)交互的函数:
Locator返回在坐标系中单击的x和y的坐标位置;
Identify在一个指定的最大距离内绘制并返回离被单击位置最近的标签项(默认为行号)。

两个函数都等待用户输入:单击鼠标左键为开始输入,单击鼠标右键为结束输入,一个identify函数的示例如下:
library(sp)
par(mfrow=c(1,2))
#使用spplot包的plot函数绘制meuse河流污染监测数据
plot(meuse)
#使用identify函数来与图形交互,选择目标点
meuse.id <-identify(coordinates(meuse), col="red")

代码运行结果如下图左所示,若想人工绘制区域选择部分数据高亮显示,使用locator函数确定区域边界点,配合构造多边形来进行数据的筛选,显示结果如下图右所示:
#使用spplot包的plot函数绘制meuse河流污染监测数据
plot(meuse)
#使用locator函数绘制多边形边界点
region<-locator(type ="o", col="red")
#由边界点构造多边形
n <-length(region$x)
p <-Polygon(cbind(region$x, region$y)[c(1:n, 1), ],
hole=FALSE)
ps<- Polygons(list(p), ID ="region")
sps<- SpatialPolygons(list(ps))
#筛选出多边形内的数据进行高亮显示
plot(meuse[sps, ], pch =16, cex =0.5, add =TRUE, col="red")


在面状数据绘制的地图中,为了识别特定的面,可以使用locator选择需要选中的面,并用overlay函数叠加点和面要素,最终筛选出求交后的面要素内容。
library(maptools)
prj<- CRS("+proj=longlat+datum=NAD27")
#加载maptools包自带的sids面数据
nc_shp <-system.file("shapes/sids.shp", package ="maptools")[1]
nc<- readShapePoly(nc_shp, proj4string = prj)
#绘制地图
plot(nc)
#使用locator函数选中需要的多边形区域
pt<-locator(type ="p")
print(pt)
#将选择的点构成SpatialPoints对象
pt.sp =SpatialPoints(cbind(pt$x, pt$y), proj4string = prj)
#将面状地图与选择点求交,
#得到点所在的区域显示具体属性信息
over(pt.sp, nc)



在R中Trellis(lattice)绘图与基础绘图有着同样的交互功能,使用spplot选择点的方式如下:
#通过设置identify=T来激活spplot的交互模式
ids<- spplot(meuse,"zinc", identify=TRUE)


2. 使用外部可视化库的图形交互
R除了相对寒酸的基本图形交互方式外,还有较为文艺的基于外部库的图形交互包如iplots,rggobi,playwith,rgl等,或者使用混合编程的方式将R作为数据处理和分析的引擎,可视化工作则交给专门的工具完成。而关于地图的交互可视化,这里介绍使用一个号称“通向高富帅图表”的R包recharts来展示。
recharts包是直接调用百度的ECharts库实现动态交互的。而ECharts是百度开发的一款开源、功能强大的数据可视化产品,如果不熟悉可以参考其主页http://echarts.baidu.com/。ECharts对地图可视化的支持也非常强大,包括2D,3D下的各种形式地图,示例参见:
http://echarts.baidu.com/doc/example.html#map。下面以recharts的emap函数可视化中国各年GDP数据为例进行介绍(目前emap函数还仅支持中国地图,限制较大,希望在以后的版本中得到更多的支持):
#recharts包不在cran发布,需要devtools工具来辅助安装
install.packages("devtools")
require(devtools)
#github安装rechartsbao
install_github('recharts', 'taiyun')
library(recharts)
#运行rechartsdemos
demo(recharts::recharts)
#加载中国GDP数据,数据框格式
load("D://ChinaGDP.RData")
#绘制面量图
plot(eMap(ChinaGDP))
结果以html网页的形式显示,在网页中可以调节色带范围显示对应区域内的数据,鼠标移动到省份会显示其GDP值。



总结

基于传统R绘图系统的地图交互可视化功能还远不能和专业的GIS软件相比,但R可以通过混合编程制作webapp或者调用外部图形库的方式来实现图形的交互。在绘图过程中可以把R作为数据处理和分析引擎,也许这才是R应有的角色。
下期预告
下一期,将为大家介绍常用的时空数据可视化方法。
关注我们
—官方网站—
R语言中文网  www.r-china.net
—官方QQ群—
R语言中文论坛-2(1000人群):427060123
R语言中文论坛(2000人群,已满):74076289
Biostatistician(500):186701945
—官方微博—
新浪微博:@R语言中文网官网
—官方微信—
微信名:R语言中文网  微信号:rchinanet


点击“阅读原文”回顾第四周:空间数据处理及可视化—绘制专题地图
回复关键字“0325获取文中示例中程序文件及数据集~
喜欢就点鼓励一下,多谢~


阅读原文




微信扫一扫
关注该公众号





回复

使用道具 举报

发表于 2015-3-27 16:39:48 | 显示全部楼层
赞{:soso_e179:}
回复

使用道具 举报

发表于 2015-3-29 10:27:30 | 显示全部楼层
{:soso_e179:}赞!
回复

使用道具 举报

发表于 2015-5-13 21:28:24 | 显示全部楼层
请问相关数据哪里可以下载嘛?如: load("D://ChinaGDP.RData"),谢谢~!!
回复

使用道具 举报

发表于 2015-5-14 11:45:20 | 显示全部楼层
Megamind 发表于 2015-5-13 21:28
请问相关数据哪里可以下载嘛?如: load("D://ChinaGDP.RData"),谢谢~!!

同问。但是作为练习,是不是可以自己创建各省GDP数据?当然其中的数据是不真实的,只是为了演示而已。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 22:55 , Processed in 0.022074 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表