| This post was kindly contributed by 数据科学与R语言 - go there to comment and to read the full post. |
# 加载扩展包
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)+stat_density2d(aes(x=lon,y=lan,fill=..level..,alpha=..level..),
size=2,bins=4,data=data,geom='polygon')+
opts(legend.position = "none")
# 为了生成动画,先准备好一个绘图函数
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等其它数据,创造出其它有意思的图形。

