专栏名称: 表哥有话讲
国内最大的R语言专业学习平台| R官方认证学习实践社区--校企实践交流、名企内推和成果分享,立即关注-掌握R语言全球最新资讯与成果!
目录
相关文章推荐
鲁中晨报  ·  余华英,被执行死刑! ·  22 小时前  
都市频道  ·  海关截获世界最毒蛙 ·  昨天  
鲁中晨报  ·  答复了!淄博这个村将改造 ·  昨天  
鲁中晨报  ·  突然大跌!超31万人爆仓 ·  3 天前  
51好读  ›  专栏  ›  表哥有话讲

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

表哥有话讲  · 公众号  ·  · 2017-09-26 11:50

正文

作者:鲁伟

一个数据科学践行者的学习日记。数据挖掘与机器学习,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    +                  value    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  "浙江大学"  "武林门码头"  "南宋御街"  "雷峰塔"  "钱江新城")

#每个图标的坐标和经纬度

geo                 lat                 city

#坐标进行微调

geo$longeo$lat

#图标的属性

geo$type

#在高德地图上进行绘制

leaflet(geo)%>%amap()%>%
  addMiniMap()%>% 
  addAwesomeMarkers(icon=~iconList[type])
 标注绘制效果如图(经纬度存在误差)

#分区域显示色彩地图

if(require(leaflet)){
  region=regionNames("杭州")
  dat=data.frame(region,rnorm(length(region)))
  map=leafletGeo("杭州",dat)

#涂色环节

  pal    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绘图功能需要我们更加持续、深入的研究和探讨。与诸位共勉!







请到「今天看啥」查看全文