R_leaflet包_最易上手地图教程(一)(上)

3901436-3e74a25b1b3da6cc

欢迎关注天善智能,我们是专注于商业智能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不便也没有必要。

下面是笔者总结的中文教程,使得新人能更快上手。

说明:以下图片皆为截图,限于技术问题,不能完全展现它的交互式功能。

1.Widget设置

Widget地图框的设置,就是确定Widget的基本参数,

包括CRS坐标系,widget的中心坐标,zoom level(缩放)的范围, widget边界坐标,data数据等。

1.1

leafletOptions()

leaflet()中有个options参数,用leafletOptions()函数来指定,可以控制widget缩放范围。

语法:

1leafletOptions(minZoom = NULL, maxZoom = NULL, crs = leafletCRS(),2 worldCopyJump = NULL, preferCanvas = NULL, …)

关键参数:

minZoom,表示最低缩小倍数,作用于所有地图层。

maxZoom,表示最高放大倍数,作用于所有地图层。

crs, 表示指定坐标系统,

preferCanvas, 表示是否将leaflet.js路径呈现在地图上。

1library(leaflet)23leaflet(options= leafletOptions(minZoom=0, maxZoom =18))

1.2

中心、缩放、边界

关键函数:

setView() ,设定地图的view(包括center位置和zoom level)

flyTo() ,切换到一个指定的location或zoom-level,使用光滑的pan-zoom

fitBounds() ,设定地图矩形区域边界。view将限制在[lng1, lat1] – [lng2, lat2]

flyToBounds() ,切换到一个指定的地图矩形区域边界,使用光滑的pan/zoom

setMaxBounds() ,限定地图矩形区域最大边界

clearBounds() ,清除地图矩形区域边界, 然后view将只会受地图层的经度和纬度数据限制。

语法:

setView(map, lng, lat, zoom, options = list())

flyTo(map, lng, lat, zoom, options = list())

fitBounds(map, lng1, lat1, lng2, lat2, options = list())

flyToBounds(map, lng1, lat1, lng2, lat2, options = list())

setMaxBounds(map, lng1, lat1, lng2, lat2)

clearBounds(map)

参数解释:

map,表示leaflet()创建的map widget

lng, 表示map center的经度,东经为正

lat, 表示map center的纬度,北纬为正

zoom, 表示zoom level

options, 列表传参,传递zoom或pan参数。

lngl, latl, lng2, lat2, 表示widget边界的坐标。

1library(leaflet)23# 设定中心坐标和zoom level4m <- leaflet() %>% addTiles() %>% setView(-71.0382679,42.3489054, zoom =18)56# 显示第一个view7m %>% fitBounds(-72,40,-70,43) # 设定view边界89# 显示第二个view10m %>% clearBounds() # 清除边界限制, leaflet()默认为世界地图

3901436-6001c1191d0c400d
3901436-56ae38b3c21dbf2e

1.3

Data数据

这里的Data不仅仅是画地图上行政区域的数据,而且包括要在地图上呈现的数据。

大多数图层添加函数都有data参数,通常使用%>%管道符逐渐传递data参数。

leaflet()通常支持下列几种形式的数据。

矩阵数据(由经度和纬度构成)。

数据框(由经度和纬度构成)。

从sp包传递的数据,包括:

SpatialPoints(数据框类型)

Line()/Lines()

SpatialLines()(数据框类型)

Polygon()/Polygons()

SpatialPolygons()(数据框类型)

从maps包传递的数据,主要是map()函数传递的数据框。

对于经度和纬度组成矩阵或数据框类型数据,在调动data添加图层时,会根据变量名进行猜测匹配:

若变量名称为lat,或latitude等,则猜测为纬度,猜测时,不区分大小写

若变量名称为lng, long或 longitude等,则猜测为经度,猜测时,不区分大小写。

也可以手动指定经度和纬度变量,使用~语法。

在参数传递过程中,默认后面的data参数覆盖前面data参数。

1.3.1 data中经纬度的指定/猜测/覆盖

1library(leaflet)23# 自动猜测匹配

4set.seed(123)5df <- data.frame(Lat = 1:10, Long = rnorm(10))6leaflet(df)%>%addCircles()78# 手动指定经度和纬度变量,结果一样 leaflet(df) %>% addCircles(lng = ~Long,

9# lat = ~Lat)

1011# 在add_xxx()函数中重新指定参数进行覆盖,结果一样 leaflet() %>%

12# addCircles(data = df) leaflet() %>% addCircles(data = df, lat = ~Lat, lng

13# = ~Long)

3901436-8edb3f483c960b7c

1.3.2 sp对象的data

1library(leaflet)2library(sp)3library(RColorBrewer)45Sr1 <- Polygon(cbind(c(2,4,4,1,2), c(2,3,5,4,2))) #4对非重复点坐标,首尾相连6Sr2 <- Polygon(cbind(c(5,4,2,5), c(2,3,2,2))) #3对非重复点坐标,画三角形7Sr3 <- Polygon(cbind(c(4,4,5,10,4), c(5,3,2,5,5))) #4对非重复点坐标,画四边形8Sr4 <- Polygon(cbind(c(5,6,6,5,5), c(4,4,3,3,4)), hole = TRUE) # hole = TRUE,表示中空91011Srs1 <- Polygons(list(Sr1),”s1″) #’s1’指定ID参数,多个多边形才有ID参数,Polygon()没有ID参数12Srs2 <- Polygons(list(Sr2),”s2″)13Srs3 <- Polygons(list(Sr4, Sr3),”s3/4″) # 合并Sr3和Sr4多边形1415# 列表传参,传递多个多边形参数16SpP <- SpatialPolygons(list(Srs1, Srs2, Srs3),1:3)1718leaflet(height =”300px”) %>% addPolygons(data = SpP, fillColor = brewer.pal(3,19name =”Set1″))

3901436-c3b9709358da79b1

1.3.3 从maps包中获取data

1library(leaflet)2library(maps)3library(RColorBrewer)45mapStates <- map(“state”, fill = TRUE, plot = FALSE)6leaflet(data= mapStates) %>% addTiles() %>% addPolygons(fillColor = brewer.pal(10,7 name=”Paired”), stroke = FALSE)

3901436-a3eeffaae5408696

1.3.4 其它参数

其它绘图参数支持R自带的数据类型,如:向量,颜色向量,数据框,同样支持用~指定。

1library(leaflet)23# 随便编一个数据4m <- leaflet() %>% addTiles()5df <- data.frame(lat = rnorm(100), lng = rnorm(100),size= runif(100,5,20),6color= sample(colors(),100))78m <- leaflet(df) %>% addTiles()9#circle图标的半径不随zoom变化:10m %>% addCircleMarkers(radius = ~size,color= ~color, fill = FALSE)11#circle图标的半径不随zoom变化:12m %>% addCircleMarkers(radius = runif(100,4,10),color= c(“red”))

3901436-1455a70888626da0
3901436-84aae39319591deb

2.Basemaps底图

leaflet支持Tilemap类型的底图,

leaflet支持多种免费第三方providers的tiles, 包括Stamen, Esri, OpenWeatherMap等,

用names(providers)可以查看所有的providers。

2.1

默认Tiles(OpenStreetMap)

使用addTiles()函数添加tiles并使用默认参数,默认即是OpenStreetMap,即街区Tiles。

1library(leaflet)23m <- leaflet()%>%setView(lng = -71.0589, lat = 42.3601, zoom = 12)4m%>%addTiles()# 显示街区图

3901436-006741f4f21283a9

2.2

第三方 Tiles

调用addProviderTiles()函数,在参数providers$后面加tiles供应商的名字就行了。 需要注意:部分第三方tiles需要注册。

通过options参数调用providerTileOptions()函数可以规避部分tiles的注册。

如果有定制的tiles模板的URL链接,可以在addTiles()函数中调用。

1library(leaflet)23m <- leaflet()%>%setView(lng = -71.0589, lat = 42.3601, zoom = 12)45# 使用Stamen.Toner 的 tiles

6m%>%addProviderTiles(providers$Stamen.Toner)

3901436-f183ee0641cd60e4

2.3

巧妙的数据转换

通过调用函数addWMSTiles()可以添加WMS(Web Map Service)的tiles。

Web地图服务(WMS)是一种标准协议,描述如何通过Internet提供任何地理配准的地图图像,

这通常由使用来自地理信息系统数据库的数据的地图服务器生成。

协议标准由Open Geospatial Consortium(OGC)开发,

并于1999年首次发布.WMS提供了一种使用HTTP接口请求地理注册地图图像的简单方法。

WMS供应商(https://en.wikipedia.org/wiki/Web_Map_Service)

下图是调用WMS的tiles,显示降雨量的图数据来源(http://mesonet.agron.iastate.edu/)。

1library(leaflet)23leaflet() %>% addTiles() %>% setView(-93.65,42.0285, zoom =4) %>% # 叠加一个WMS的tiles图层4addWMSTiles(“http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi”, layers =”nexrad-n0r-900913″,5 options = WMSTileOptions(format =”image/png”, transparent = TRUE), attribution =”Weather data <U+00A9> 2012 IEM Nexrad”)

3901436-5f283fc8c9c7df95

2.4

Tiles图层叠加

多个Tiles图层也可以叠加, 但是这种情况通常仅用于表层tiles是半透明的情况下,

或在options参数中手动指定不透明度opacity。

opacity从0(完全透明)到1(完全不透明)。

1library(leaflet)23m <- leaflet() %>% setView(lng = -71.0589, lat =42.3601, zoom =12)45m %>% addProviderTiles(providers$MtbMap) %>% # 底层tiles6 addProviderTiles(providers$Stamen.TonerLines, # 叠加一层tiles,显示公路和街道7 options = providerTileOptions(opacity =0.35)) %>% # opacity设定非透明度8 addProviderTiles(providers$Stamen.TonerLabels) # 叠加tiles,显示公路名,街道名,机场图标。

3901436-a816d64d122ece87

3.Markers(图标)

使用图标用于标记地图上特殊的点。图标的位置通过经纬度指定。

leaflet中,图标可以分为:icon,circle图标,clusters(簇),共3类。

Markers坐标获取途径:

SpatialPoints()/SpatialPointsDataFrame() (sf包)

POINT, sfc_POINT或sf对象(sf包), 只有x,y维度的数据才能被使用。

只有2列的矩阵(第1列为经度,第2列为纬度)

含经度列和纬度列的数据框,

同样默认猜测匹配,也可以手动指定,如: addMarkers(lng = ~Longitude, lat = ~Latitude)。

用1个数字向量指定lng或lat参数。

注意:不支持sf包中的 MULTIPOINT对象。

3.1

icon图标

icon图标的添加分为几类:

addMarkers()函数,添加leaflet中内置一种icon。

makeIcon()指定addMarkers()函数内的icon参数,

添加URL链接(包括file path)中的一种icon。

icons()指定addMarkers()内的icon参数,同时添加几种icon。

iconList()与addMarkers()函数联用,同时添加很多种icon。

addAwesomeMarkers()函数,添加awesome icons。

3.1.1 内置icon(addMarkers())

默认Icon为雨滴状图标(dropped pin)。

与大多数图层绘制函数一样,popup参数可以用来指定一个message,当点击该Icon则显示该message;

label参数可以用来指定一个文本标签,可以是浮动的或静止的。

1library(leaflet)2data(quakes)34# 索引quakes前20行数据进行显示。5leaflet(data = quakes[1:20, ])%>%addTiles()%>%6# 增加图标图层,标签显示为quakes中的mag变量

7addMarkers(~long, ~lat, popup = ~as.character(mag), label = ~as.character(mag))

3901436-41df2c53e841c384

3.1.2 自定义icon(makeIcon())

自定义Icon图标,可以通过URL链接或文件路径来指定。

对于单独一个Icon,若要映射到多个数据点,则可以使用makeIcon()函数制作一组Icon图标,

然后再调用addMarkers()函数增加Marker图层。

免费Icon下载(https://icons8.com/icons)

1library(leaflet)2data(quakes)34# 制作一组Icon5greenLeafIcon <- makeIcon(6iconUrl=”E:/R_input_output/images_input/leaf-green.png”,# 使用文件路径指定7iconWidth=38,iconHeight=95,# 设定当个Icon的相对长宽。 8iconAnchorX=22,iconAnchorY=94,# 定位点相对位置(在IconWidth和IconHeight内)9shadowUrl=”E:/R_input_output/images_input/leaf-shadow.png”,# 阴影Icon10shadowWidth=50,shadowHeight=64,11shadowAnchorX=4,shadowAnchorY=6212)1314leaflet(data= quakes[1:4,]) %>% addTiles() %>%15addMarkers(~long, ~lat,icon= greenLeafIcon)# 增加Icon图层

3901436-bafad2ecf4f62efd

3.1.3 icons()(多种icons)

若多个Icons图标尺寸等参数一致,仅仅URLs不一样,使用icons()制作Icon图标组合非常方便,

icons()语法与data.frame()类似,参数都可以用向量指定,短的参数将会循环补齐

1library(leaflet)2data(quakes)34quakes1 <- quakes[1:10,]# 索引前10行数据56leafIcons <- icons(7iconUrl= ifelse(quakes1$mag <4.6,# 若mag < 4.6为真8″E:/R_input_output/images_input/leaf-green.png”,# test = TRUE9″E:/R_input_output/images_input/leaf-red.png”# test = FALSE10),11iconWidth=38,iconHeight=95,# length = 1, 循环补齐12iconAnchorX=22,iconAnchorY=94,# length = 1, 循环补齐13shadowUrl=”E:/R_input_output/images_input/leaf-shadow.png”,# length = 1, 循环补齐14shadowWidth=50,shadowHeight=64,# length = 1, 循环补齐15shadowAnchorX=4,shadowAnchorY=62# length = 1, 循环补齐16)1718leaflet(data= quakes1) %>% addTiles() %>%19addMarkers(~long, ~lat,icon= leafIcons)# 传递制作的Icons参数20

3901436-36db943135cacdee

3.1.4 icon列表(iconList())

若一些Icons的参数相差很大,此时使用iconList()函数更加方便,

相当于创建一个列表将makeIcon()创建icons包裹起来。然后整体传递给addMarkers()。

1library(leaflet)23# iconList()制作icons组成的列表4oceanIcons <- iconList(5ship= makeIcon(iconUrl=”E:/R_input_output/images_input/cargo-ship.png”,# 使用文件路径指定6iconWidth=30,iconHeight=20),# 设定当个Icon的相对长宽。 7pirate= makeIcon(iconUrl=”E:/R_input_output/images_input/pirates-caribbean.png”,# 使用文件路径指定8iconWidth=30,iconHeight=30)# 设定当个Icon的相对长宽。 9)1011# 编造一个数据12df <- sp::SpatialPointsDataFrame(13cbind(# 列合并后为一个4列20行的数据框14(runif(20) – .5) *10-90.620130,# 经度15(runif(20) – .5) *3.8+25.638077# 纬度16),17data.frame(type= factor(18ifelse(runif(20) >0.75,”pirate”,”ship”),# test > 7.5为真,则type = “pirate”19c(“ship”,”pirate”)# length = 2 < 20, 循环补齐20))21)2223leaflet(df) %>% addTiles() %>%24addMarkers(icon= ~oceanIcons[type])# 使用type中的元素匹配oceanIcons中的列名。

3901436-8d688695b6004d08

3.1.5 Awesome icons(addAwesomeMarkers())

leaflet中可以使用定制Icons的颜色,

使用addAwesomeMarkers()添加awesome icons, 用法与addMarkers()类似。

awesome icons库:fontawesome,glyphicon,ionicons。

在addAwesomeMarkers()中可以用library参数指定awesome icons库。

默认为library = “glyphico”, library = “fa”表示fontawesome库, library = “ion”表示ioncons库,

与icons()和iconList()函数可以用于addMarkers()类似,

awesomeIcons()和 awesomeIconList()函数可以用于 addAwesomeMarkers()以添加多个icons。

1library(leaflet)2data(quakes)34df.20<- quakes[1:20,]# 索引前20行数据56# 创建颜色向量函数,mag <= 4 为绿色,mag = 5为橙色, mag > 5为红色7getColor <-function(quakes){8sapply(quakes$mag,function(mag){9if(mag <=4) {10″green”11}elseif(mag <=5) {12″orange”13}else{14″red”15} })16}1718icons <- awesomeIcons(19icon =’flash’,# icon名字为”flash”(闪电),名字可以从前面库的网站上查看20iconColor =’black’,# 指定icon颜色21library =’ion’,# 指定icons库为ionicons22markerColor = getColor(df.20)# 指定markers颜色23)2425leaflet(df.20) %>% addTiles() %>%26addAwesomeMarkers(~long, ~lat, icon=icons, label=~as.character(mag))

3901436-00263481d963941d

3.2

Marker clusters(图标簇)

当地图上存在大量的图标,可以通过设置clusterOptions参数以簇的形式插入。

好处是,缩小地图后,图标聚集成簇,放大地图后,簇散开为多个图标。 簇上可以显示该簇包含图标的数目。

3.2.1 添加簇(clusterOptions参数)

使用markerOptions()设定单个簇的参数。

对于多个簇,同样可以用列表传递多个簇参数,使用markerClusterOptions()函数。

1library(leaflet)23#cache = TRUE使用上个代码块的数据4leaflet(quakes) %>% addTiles() %>% addAwesomeMarkers(~long, ~lat, icon = icons,5 label = ~as.character(mag), clusterOptions = markerClusterOptions() # 设置簇6)

3901436-52b9c5ae465d26e2

3.2.2 簇冻结(freezeAtZoom参数)

使用markerClusterOptions()中的freezeAtZoom参数可以设定簇冻结在一个zoom level。

这样缩放地图时,簇是否散开取决于冻结时的zoom level高低。

例如下图中,设置freezeAtZoom = 5

1library(leaflet)23leaflet(quakes) %>% addTiles() %>% addAwesomeMarkers(~long, ~lat, icon = icons,4 label = ~as.character(mag), clusterOptions = markerClusterOptions(freezeAtZoom =5) # 冻结簇在zoom level =55)

3901436-bffc26aff17afecd

3.3

circle图标

circle图标与circle形状不一样:

circle Markers 属于图标,其尺寸是像素尺寸,不随zoom level变化而变化。

而circles 属于形状,与多边形是一类,其尺寸是以“米”为单位,随zoom level 变化而变化。

使用addCircleMarkers()函数添加圆圈图标。 语法:

1addCircleMarkers(map, lng = NULL, lat = NULL, radius =10,2 layerId = NULL, group = NULL, stroke = TRUE,color=”#03F”,3 weight =5, opacity =0.5, fill = TRUE, fillColor =color,4 fillOpacity =0.2, dashArray = NULL, popup = NULL,5 popupOptions = NULL, label = NULL, labelOptions = NULL,6 options = pathOptions(), clusterOptions = NULL, clusterId = NULL,7 data= getMapData(map))

关键参数:

radius, 表示指定circles的半径,为数字向量或~引导的表达式。

stroke, 表示是否显示路径阴影, 默认stroke = TRUE显示路径阴影,这样圆环就出现了阴影边框。

color, 表示指定stroke的颜色。

weight, 表示指定stroke像素宽度。

opacity, 表示指定stroke透明度,opacity从0(完全透明)到1(完全不透明)。

fill, 表示是否填充路径颜色(如填充多边形和园环)

fillColor, 表示指定fill颜色。

fillOpacity, 表示指定fill头透明度,opacity从0(完全透明)到1(完全不透明)。

dashArray, 表示指定stroke线型,为数字类型字符串。原理与ggplot2中自定义线型类似。

如dasharray = “4 1 2″表示:先闭合4个像素长度,然后缺口1,再闭合2,再缺口4,闭合1,缺口2。

1library(leaflet)23# 默认circles参数4leaflet(df) %>% addTiles() %>% addCircleMarkers()56# stroke =FALSE去掉路径阴影7leaflet(df) %>% addTiles() %>% addCircleMarkers(radius =15, stroke =FALSE) %>%89# fill =FALSE空心圆环10addCircleMarkers(radius =15, color =”magenta”, weight =8, opacity =0.2,11fill =FALSE) %>%12# 分别指定stroke和fill不同的颜色。并调整透明度13addCircleMarkers(radius =60, color =”lime”, weight =8, opacity =0.8, fillColor =”cyan”,14fillOpacity =0.3, dashArray =”5 2″)

3901436-4ac2e643533acdba
3901436-727309008168950b

不同半径的circles:

addCircleMarkers()中的参数同样可以用向量指定,如下图:

1library(leaflet)23# 定义一个色板函数4pal <- colorFactor(c(“blue”,”magenta”), domain = c(“ship”,”pirate”))56leaflet(df) %>% addTiles() %>%7addCircleMarkers(8radius = ~ifelse(type ==”ship”,6,10), # 分别设置半径,ship半径为6,pirate半径为109color = ~pal(type), # 色板函数匹配10stroke =FALSE, fillOpacity =0.511)

3901436-6eab215b5b36f997

4.信息提示框

给标记点增加信息提示框有4种方式:

使用addPopups()在地图中添加单个popup。

在图标或形状添加函数中,指定popup参数。

在图标或形状添加函数中,指定labelOptions参数。

使用addLabelOnlyMarkers()函数创建无图标labels

4.1

addPopups

popups是包含HTML链接的提示框,用于显示标记点的文本信息。

popup最常见的用法是,当点击图标时才出现在地图上。

1library(leaflet)23# 生成popup框内信息4content <- paste(sep =”<br/>”, # 分隔符为html语法的换行符5# 单引号内为HTML链接,单引号后为HTML显示标签6″<b><a href=’http://www.samurainoodle.com’>Samurai Noodle</a></b>”,7″606 5th Ave. S”,8″Seattle, WA 98138″9)1011leaflet() %>% addTiles() %>%12addPopups(-122.327298,47.597131, popup = content, # 将HTML语法支持的文本内容传递给popup13options = popupOptions(closeButton =FALSE) # popupOptions()中设定popups的尺寸和样式14)

3901436-e00d7cfa813413dc

4.2

popup参数

图标和形状的添加函数中都有一个popup参数。

当存在大量不含HTML链接的popups时,可以使用htmltools::htmlEscape()函数,

以避免将字符串作为html语言进行转义,直接输出字符串到popup框。

1library(leaflet)2library(htmltools)# 为了调用htmlEscape()函数,

34# 创建一个数据框

5df <- read.csv(textConnection(“Name,Lat,Long

6Samurai Noodle,47.597131,-122.327298

7Kukai Ramen,47.6154,-122.327157

8Tsukushinbo,47.59987,-122.326726″))9df1011leaflet(df)%>%addTiles()%>%addMarkers(~Long, ~Lat, popup = ~htmlEscape(Name))# 默认点击Marker才出现popup

3901436-76c61acc10143823
3901436-0b37293ca083f048

4.3

labelOptions()

labels内容包括文本和HTML链接内容。 用labelOptions()函数指定labelOptions参数。

关键参数:

noHide, 为逻辑值,FALSE表示仅当鼠标指针悬浮到marker上,才显示label;

TRUE,则一直显示label。

textOnly,为逻辑值, TRUE表示只显示文本,不显示提示框。

style,表示设定信息框的样式,列表传参

可以设定label的颜色,字体,字型,字体大小,边框线颜色,边框阴影等。

1library(leaflet)23leaflet() %>% addTiles() %>% setView(-118.456554,34.09,13) %>%45addMarkers(6lng =-118.456554, lat =34.105,7label =”Default Label”,8labelOptions = labelOptions(noHide = T)) %>% # 不隐藏的popups910addMarkers(11lng =-118.456554, lat =34.095,12label =”Label w/o surrounding box”,13labelOptions = labelOptions(noHide = T, textOnly =TRUE)) %>% # 只显示文字,不显示提示框1415addMarkers(16lng =-118.456554, lat =34.085,17label =”label w/ textsize 15px”,18labelOptions = labelOptions(noHide = T, textsize =”15px”)) %>% # 修改提示框大小,文本大小随之变化1920addMarkers(21lng =-118.456554, lat =34.075,22label =”Label w/ custom CSS style”,23labelOptions = labelOptions(noHide = T, direction =”bottom”, # 修改提示框相对位置24style =list( # 修改提示框文本样式,列表传参25″color”=”red”, # 设定文本颜色为红色26″font-family”=”serif”, # 设置字体27″font-style”=”italic”, # 设置字型为斜体28″box-shadow”=”3px 3px yellow”, # 设置提示框边框线阴影尺寸和边框阴影颜色29″font-size”=”12px”, # 设置字体大小为12个像素点30″border-color”=”cyan”# 设置提示框边框线颜色31))32)

3901436-d2f908f45f282aff

往期精彩:

不用代码,从搜索数据中解读星巴克“猫爪杯”如何挠你的心

是否,是否,总是富肥穷瘦?(文末上周投票公布)

R语言自然语言处理:词性标注与命名实体识别

R语言中文社区2018年终文章整理(作者篇)

R语言中文社区2018年终文章整理(类型篇)

You may also like...