CWYAlpha

Just another WordPress.com site

Thought this was cool: 用ggmap包进行地震数据的可视化

leave a comment »



最近又发现了一个比较好玩的包ggmap。从名字上可以猜测出来,它的作用就是将ggplot2和map相结合。这样R语言用户能方便的获取各种静态地图数据,并在其基础上使用强大的ggplot绘图工具。ggmap包整合了四种地图资源,分别是Google、OpenStreetMaps、Stamen和Cloudmade。为了演示ggmap的作用,本例是从地震信息网获取最近一周的地震数据,得到其经纬度,然后以散点形式绘制在google地图上。这个思路本质上和之前的一篇博文是一致的,但用ggmap包实现起来更为简单。

# 加载扩展包

library(ggmap)
library(animation)
library(XML)
# 从网页上抓取数据,并进行清理
webpage <-'http://data.earthquake.cn/datashare/globeEarthquake_csn.html'
tables <- readHTMLTable(webpage,stringsAsFactors = FALSE)
raw <- tables[[6]]
data <- raw[-1,c('V1','V3','V4')]
names(data) <- c('date','lan','lon')
data$lan <- as.numeric(data$lan)
data$lon <- as.numeric(data$lon)
data$date <- as.Date(data$date, "%Y-%m-%d")
# 用ggmap包从google读取地图数据,并将之前的数据标注在地图上。
ggmap(get_googlemap(center = 'china', zoom=4,maptype='terrain'),extent='device')+
geom_point(data=data,aes(x=lon,y=lan),colour = 'red',alpha=0.7)
 

更好玩的作法就是根据地震发生的日期生成不同的静态图,然后用animaiton包将其整合为一个gif动画。

# 为了生成动画,先准备好一个绘图函数
plotfunc <- function(x) {
df <- subset(data,date <= x)
df$lan <- as.numeric(df$lan)
df$lon <- as.numeric(df$lon)
p <- ggmap(get_googlemap(center = 'china', zoom=4,maptype='terrain'),,extent='device')+
geom_point(data=df,aes(x=lon,y=lan),colour = 'red',alpha=0.7)
}
# 获取地震的日期
time <- sort(unique(data$date))
# 生成并保存动画
saveMovie(for( i in time) print(plotfunc(i)))

ggmap包中还有其它一些非常有用的函数。例如geocode函数可以根据地名字符串来查询经纬度,gglocator类似于基本包中的locator,它根据鼠标的点选来返回其坐标值。另外一个是mapdist函数,可以返回两点之间的地图距离和行驶时间。结合这几个函数可以直接在R中绘制地图,选择你的出发地和目标地,然后获得两地之间的距离。当然你还可以配合GPS等其它数据,创造出其它有意思的图形。

from 数据科学与R语言: http://xccds1977.blogspot.com/2012/06/ggmap.html

Written by cwyalpha

六月 28, 2012 在 3:54 上午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: