可视化之一——利用R实现地图数据可视化

先上例图这里写图片描述

在地图上显示数据,可以展示与空间相关的数据,抓取到坐标后,空间数据化,利用ggplot2与ggmap,可以很好的投在图上。(整合了《Displaying Time Series, Spatial, and Space-Time Data with R-Taylor and Francis, CRC Press (2)》和http://mp.weixin.qq.com/s?__biz=MzA3NDUxMjYzMA==&mid=212277558&idx=1&sn=20f3c094de0e6ea721679c3dd3f2c6e7#rd的资料
以下代码中数据做过调整,换成了自己的数据,替换后可行,

#======不加背景=====
#载入spplot包
library(sp)
#载入数据,做成csv的
datasum<- read.csv("f:/sumdata.csv",header=TRUE)
#获取空间数据,coordinates-取坐标
coordinates(datasum)<-~long+lat
#分级显示
airPal <- colorRampPalette(c('springgreen1', 'sienna3', 'gray5'))(5)
#画无背景的图,利用spplot,datasum[sum]-作图数据,scales-轴线区域,cex-符号大小,edge.col-图表边缘线,col.regions-向量充填颜色
spplot(datasum["sum"], col.regions=airPal, cex=sqrt(1:5),
       edge.col='black', scales=list(draw=TRUE),
       key.space='right')
#划区域
datasum1 <- data.frame(datasum)
datasum1$Sum <- cut(datasum$sum, 5)
#作图,利用ggplot
library(ggplot2)
#df-dataframe,aes-地图审美??,
ggplot(data=datasum1, aes(long, lat, size=Sum, fill=Sum)) +
  geom_point(pch=21, col='black') + theme_bw() +
  scale_fill_manual(values=airPal)
#定义分类,利用classInt库
library(classInt)
## The number of classes is chosen between the Sturges and the
## Scott rules.
nClasses <- 5
## classIntervals(var-连续数值,n分类数值,style-聚类方式?fisher(默认),kmeans,sd,fixed,pretty,etc)
intervals <- classIntervals(datasum$sum, n=nClasses, style='kmeans')
## Number of classes is not always the same as the proposed number
nClasses <- length(intervals$brks) - 1
#options(digists-controls the number of digits to print when printing numeric values.)
op <- options(digits=4)
tab <- print(intervals)
options(op)
## Complete Dent set of circle radii (mm)
dent <- c(0.64, 1.14, 1.65, 2.79, 4.32, 6.22, 9.65, 12.95, 15.11)
## Subset for our dataset子集,seq-产生序列?
dentAQ <- dent[seq_len(nClasses)]
## Link Size and Class: findCols returns the class number of each
## point; cex is the vector of sizes for each data point
idx <- findCols(intervals)
cexsum <- dentAQ[idx]
## ggplot2 version,加分区
datasum$classsum <- factor(names(tab)[idx])
##数据分析
datasum1 <- data.frame(datasum)
##画圆圈半径优化过的图,为什么优化,有问题!!!
ggplot(data=datasum1, aes(long, lat, size=classsum, fill=classsum)) +geom_point(pch=21, col='black') + theme_bw() +
  scale_fill_manual(values=airPal) +
  scale_size_manual(values=dentAQ*2)
## spplot version
## Definition of an improved key with title and background
sumkey <- list(x=0.98, y=0.02, corner=c(1, 0),
               title=expression(NO[2]~~(paste(mu, plain(g))/m^3)),
               cex.title=.75, cex=0.7,
               background='gray92')
#根据上文做了修改
psum <- spplot(datasum["classsum"],
               col.regions=airPal, cex=dentAQ,
               edge.col='black',
               scales=list(draw=TRUE),
               key.space=right)
psum
##============加入地图背景========
## 使用ggmap包进行绘图,ggmap包是一个用在线地图(Google Maps and
## OpenStreetMap)进行空间可视化的包
library(ggmap)
# 获得销量数据的空间边界
madridBox <- bbox(datasum)
# get_map函数用于获取地图背景
# maptype:地图类型,包括谷歌地图的卫星影像、路网等和其他来源的在线地图
# source:地图资源,包括谷歌地图、openstreetmap等
## 使用谷歌地图的卫星影像做背景
madridGG <- get_map(c(madridBox), maptype="satellite",source='google')
## 使用谷歌地图的路网做背景
madridGGroad <- get_map(c(madridBox), maptype="roadmap",source='google')
# ggmap绘图需要将加载SpatialPointsDataFrame转换为DataFrame
datasum1 <- data.frame(datasum)
## ggmap绘图1:
# 输出设备为png图片
png("E:\\fig2.png",
    height=5, width=6, res=300, units='in',
    type ="cairo", family="GB1")
# 谷歌地图的卫星影像为背景绘图
ggmap(madridGG)+
  geom_point(data=datasum1,
             aes(long, lat, size=classsum, fill=classsum),
             pch=21, col='black')+
  scale_fill_manual(values=airPal)+
  scale_size_manual(values=dentAQ*2)
dev.off()
## ggmap绘图2:
png("E:\\fig3.png",
    height=5, width=6, res=300, units='in',
    type ="cairo", family="GB1")
# 谷歌地图的路网为背景绘图
ggmap(madridGGroad)+
  geom_point(data=datasum1,
             aes(long, lat, size=classsum, fill=classsum),
             pch=21, col='black')+
  scale_fill_manual(values=airPal)+
  scale_size_manual(values=dentAQ*2)
dev.off()
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值