R语言交互式绘制杭州市地图:leafletCN包简介
作者:鲁伟
一个数据科学践行者的学习日记。数据挖掘与机器学习,R与Python,理论与实践并行。个人公众号:数据科学家养成记 (微信ID:louwill12)
作为一名地图控,曾经一度不敢看地图,只要瞄一眼心思就立马飞到三山五岳,四海五湖。初中高中上地理课时,每每会思索教材上那些漂亮的彩色地图是怎么画出来,后来我才明白这些炫目的彩图背后的实现原理并不难。相信有很多人和我一样,一开始被R语言吸引并不是因为其出色的统计计算和数据分析功能,而是由于其强大的绘图系统。所以,当一名地图控碰上R语言时,结果只能是一拍即合,皆大欢喜。
本文以leafletCN地图包为对象,简单介绍leafletCN包的主函数和辅助函数,以交互式绘制杭州市地图为例展现R的强大的地图绘制功能。本文部分参考了Lchiffon的github和悟乙己老师的csdn博客,地址如下。
https://github.com/lchiffon/leafletCN
http://blog.csdn.net/sinat_26917383/article/details/57083985
leafletCN包简介
leafletCN包的安装:
install.packages("leafletCN")
library(leafletCN)
leafletCN包的帮助页面:
主函数:regionNames() 极其方便的找地名函数
demomap() 根据输入的地名进行交互式区域绘图
geojsonMap() 分区块标色绘图
辅助函数:amap() 高德地图地图
read.geoShape() 保存geojson对象方便调用
leafletGeo() 地图+小显示框
函数使用
#regionName():找地名函数
regionNames("浙江省")
[1] "丽水市" "杭州市" "温州市" "宁波市" "舟山市" "台州市" "金华市" "衢州市"
[9] "绍兴市" "嘉兴市" "湖州市"
regionNames("杭州市")
[1] "富阳市" "拱墅区" "滨江区" "淳安县" "建德市" "江干区" "临安市" "上城区"
[9] "桐庐县" "西湖区" "下城区" "萧山区" "余杭区"
regionNames("宣城市")
[1] "广德县" "绩溪县" "郎溪县" "宁国市" "宣州区" "泾县" "旌德县"
regionNames()#显示全国364个省和地级市
[112] "扬州" "南京" "泰州"
[115] "无锡" "常州" "镇江"
[118] "丽水" "杭州" "温州"
[121] "宁波" "舟山" "台州"
[124] "金华" "衢州" "绍兴"
[127] "嘉兴" "湖州" "六安"
[130] "安庆" "滁州" "宣城"
#demomap():区域式地图
library(rgeos)
demomap("杭州")
#geojsonmap():地图标色函数
dat<-data.frame(name<-regionNames("china"),
+ value<-rnorm(34))
geojsonMap(dat,"china")
dat#查看数据
name....regionNames..china.. value....rnorm.34.
1 新疆维吾尔自治区 -1.49576164
2 西藏自治区 0.58359538
3 内蒙古自治区 -0.14841568
4 青海省 -0.90633989
5 四川省 -0.17865269
6 黑龙江省 0.04853841
7 甘肃省 -0.58465146
8 云南省 -0.37635409
9 广西壮族自治区 -1.59054333
10 湖南省 0.96030177
#amap:高德地图底图
if(require(leaflet)){
leaflet() %>% amap()}
以绘制杭州市地图为例
#单点标注杭州西湖:地图+标点
leaflet()%>%
amap()%>%
addMarkers(lng=120.15,lat=30.25,popup="西湖")
#生成图标列表
iconList<-awesomeIconList(
"浙江大学"<-makeAwesomeIcon(icon="school",markerColor="purple"),
"武林门码头"<-makeAwesomeIcon(icon="wharf",markerColor="blue"),
"南宋御街"<-makeAwesomeIcon(icon="cutlery",markerColor="orange"),
"雷峰塔"<-makeAwesomeIcon(icon="tower",markerColor="green"),
"钱江新城"<-makeAwesomeIcon(icon="book",markerColor="white")
)
#每个图标的坐标和经纬度
geo<-data.frame(lon<-c(120.12,120.163,120.17,120.15,120.21),
lat<-c(30.26,30.276,30.24,30.232,30.24),
city<-rep("Hangzhou",5))
#坐标进行微调
geo$lon<-geo$lon+rnorm(5,0,0.003)
geo$lat<-geo$lat+rnorm(5,0,0.003)
#图标的属性
geo$type<-c("浙江大学","武林门码头","南宋御街","雷峰塔","钱江新城")
#在高德地图上进行绘制
leaflet(geo)%>%amap()%>%
addMiniMap()%>%
addAwesomeMarkers(icon=~iconList[type])
标注绘制效果如图(经纬度存在误差)
#分区域显示色彩地图
if(require(leaflet)){
region=regionNames("杭州")
dat=data.frame(region,rnorm(length(region)))
map=leafletGeo("杭州",dat)
#涂色环节
pal<-colorNumeric(
palette="Reds",
domain=map$value)
#载入高德地图amap
leaflet(map)%>%amap()%>%
#加入框边界及颜色
addPolygons(stroke=TRUE,
smoothFactor=1,
fillOpacity=0.7,
weight=1,
color=~pal(value),
popup=~htmltools::htmlEscape(popup)
)%>%
#加入右下角边框
addLegend("bottomright",pal=pal,values=~value,
title="legendTitle",
labFormat=leaflet::labelFormat(prefix=""),
opacity=1)
}
小结
R有着极其出色的地图可视化功能,除了leafletCN包,还有功能更为强大的leaflet包、第三方Remap包等等。本文仅以绘制杭州市地图为例,简要地介绍了leafletCN包的主要绘图函数,当然了,更深入的R绘图功能需要我们更加持续、深入的研究和探讨。与诸位共勉!
推荐阅读
公众号后台回复关键字即可学习
回复 R R语言快速入门免费视频
回复 统计 统计方法及其在R中的实现
回复 用户画像 民生银行客户画像搭建与应用
回复 大数据 大数据系列免费视频教程
回复 可视化 利用R语言做数据可视化
回复 数据挖掘 数据挖掘算法原理解释与应用
回复 机器学习 R&Python机器学习入门