查看原文
其他

R语言交互式绘制杭州市地图:leafletCN包简介

2017-09-26 鲁伟 R语言中文社区

作者:鲁伟

一个数据科学践行者的学习日记。数据挖掘与机器学习,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绘图功能需要我们更加持续、深入的研究和探讨。与诸位共勉!


推荐阅读

其实你根本不懂RStudio的用心良苦!

ggplot2玫瑰图案例——星巴克门店分布图

最惹销售反感的十种数据分析师,进来看看有没有你

R语言数据分析练手小项目:杭州二手房数据分析



公众号后台回复关键字即可学习

回复 R              R语言快速入门免费视频 
回复 统计          统计方法及其在R中的实现
回复 用户画像   民生银行客户画像搭建与应用 
回复 大数据      大数据系列免费视频教程
回复 可视化      利用R语言做数据可视化
回复 数据挖掘   数据挖掘算法原理解释与应用
回复 机器学习   R&Python机器学习入门 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存