欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!
对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。
作者:李誉辉
四川大学在读研究生
简
介
最近一直在寻找方便上手的地图包,实验了google地图包,百度地图包,发现还是有很多限制。
百度地图包搭配的REmap总是崩溃,
google地图包ggmap现在需要国际信用卡注册,总之,都不甚满意。
虽然ggplot2地图功能非常丰富,但是还是不够简单快捷。
尤其是当我们仅仅需要绘制一些简单的地图时。
经过圈子大佬的推荐,开始尝试leaflet包,确实给我很多惊喜。
leaflet包相对其它地图包,有很多优点和缺点,
首先,绘制地图简单快捷,因为都是基于供应商的tiles,一行代码就可以render出基本widget地图。
支持管道传参,一个图层一个图层进行添加,代码结构更加清晰。
其次,有很多tiles供应商可以选择,包括高德、google、Stamen, Esri, OpenWeatherMap,NASA,
等好几十个tiles供应商。当然其中一些需要注册。其中的google可以绕过注册,已经很难得了。
对于在地图上添加markers图标,shapes形状,线条等,异常方便快捷,这在ggplot2中很难做到的。
支持栅格数据,rasters栅格数据是基于像素点的地图。可以看出,leaflet具有很强的包容性。
支持多种投影坐标系,甚至可以自定义坐标系,这在某些特殊场景非常重要。
当然还有更重要的是,其具有一定交互能力,可以缩放拖拽,
简单的图层切换也不需要使用Shiny。使得更容易上手。
其它特点,首先tiles是基于供应商的,必须联网,
其次对颜色支持不一样,只支持HEX颜色空间和colors()中的颜色名称。 当然内置的几个palette函数,非常特别。
总之,笔者认为leaflet包与ggplot2包的互补性非常好,刚好弥补了ggplot2中画地图的不足。
对于大量数据需要呈现在地图上的场景,还是`ggplot2, leaflet中插入其它plots不便也没有必要。
下面是笔者总结的中文教程,使得新人能更快上手。
说明:以下图片皆为截图,限于技术问题,不能完全展现它的交互式功能。
5.形状与线条
在leaflet中,添加形状和线条非常容易。
多边形和折线
线条和多边形数据源可以从以下途径获取:
SpatialPolygons(), SpatialPolygonsDataFrame(),
Polygons()和Polygon()对象(来自sp包)
SpatialLines(), SpatialLinesDataFrame(), Lines(), 和Line()对象(来自sp包)
MULTIPOLYGON(), POLYGON(), MULTILINESTRING()和LINESTRING()对象(来自sp包)
map()对象(来自maps包)。
使用map(fill = TRUE)得到多边形数据,使用map(fill = FALSE)得到折线段数据
2列的矩阵,第1列为经度,第2列为纬度。多边形之间用(NA, NA)行分开。
但是对于多边形内部存在空洞,这种方法失效,须使用SpatialPolygons()。
5.1
circles形状
使用addCircles()添加circle形状。
绘制circle形状时,仅仅需要圆心坐标和半径。使用radius参数指定半径。
1library(leaflet)
2
3cities <- read.csv(textConnection("
4City,Lat,Long,Pop
5Boston,42.3601,-71.0589,645966
6Hartford,41.7627,-72.6743,125017
7New York City,40.7127,-74.0059,8406000
8Philadelphia,39.9500,-75.1667,1553000
9Pittsburgh,40.4397,-79.9764,305841
10Providence,41.8236,-71.4222,177994
11"))
12
13leaflet(cities) %&