专栏首页庄闪闪的R语言手册空间地理数据可视化之 leaflet 包及其拓展

空间地理数据可视化之 leaflet 包及其拓展

前言

这一期 R 可视化介绍的是 leaflet 包及其扩展内容,除了《Geospatial Health Data》[1]一书中介绍的关于此包的基本使用方法外,小编还在网上探索了 leaflet 包的其他内容,详细见 CSDN[2] 网站。关于 leaflet 包的更多内容,可进入leaflet官网[3]查看学习。

1.基本画图设置

Leaflet 包是制作交互式地图非常流行的开源 JavaScript 库,可以很容易地在 R 中合成和控制地图。此包是标准的 R 语言包,故可直接通过 install.packages() 翻墙安装。

我们可以调用 leaflet() 函数来创建地图,并可以使用 addTiles() (添加背景地图)、 addPolygons() (添加多边形)、 addLegend() (添加图例) 等来添加图层。

在使用 leaflet包前,要求先将地图数据转化为 EPSG4326 下的投影,使用的是 sf 包中的 st_transform() 函数。

下面给出一个用 leaflet 包创建的 1974 年北卡罗来纳州婴儿猝死数量的地图的例子。

例子

library(sf)
map <- st_read(nameshp, quiet = TRUE) ##读取数据
map <- st_as_sf(map)
st_crs(map) ## 查看map数据的投影坐标系
## Coordinate Reference System:
##   EPSG: 4267 

map <- st_transform(map, 4326) ##转化为 EPSG 4326

library(leaflet)

pal <- colorNumeric("YlOrRd", domain = map$SID74)
leaflet(map) %>%
  addTiles() %>%
  addPolygons(
    color = "black", fillColor = ~ pal(SID74), ##指定多边形边界和填充的颜色
    fillOpacity = 1 ##设置不透明度
  ) %>%
  addLegend(pal = pal, values = ~SID74, opacity = 1) ##添加图例

1974 年北卡罗来纳州婴儿猝死数量

2.内容扩展

2.1 显示多个标记点

使用 addMarkers() 函数添加标记点,其中 ~long~lat 分别代表经纬度,popuplabel 表示标记点数字显示方式为弹窗和标签。

例子

data(quakes) ## R 包自带数据

leaflet(data = quakes[1:20,]) %>% ##只标记前20个数据
  addTiles() %>% ##添加背景地图
  addMarkers(~long, ~lat, popup = ~as.character(mag), label = ~as.character(mag)) ##添加标记点

leaflet 包显示多个标记点

2.2 设置标记点形状

先设置图标后生成地图,其中叶子图像来自官网可直接在代码中引用(http://leafletjs.com/examples/custom-icons/leaf-green.png等)。下面代码使用icons()设置标记点形状并记为 leafIcons, 之后在绘制地图中的addMarkers()中加入icon = leafIcons

例子

#设置图标
leafIcons <- icons(
  iconUrl = ifelse(quakes$mag < 4.2,
                   "http://leafletjs.com/examples/custom-icons/leaf-green.png",
                   ifelse(quakes$mag < 5.2,"http://leafletjs.com/examples/custom-icons/leaf-red.png",
                          "http://leafletjs.com/examples/custom-icons/leaf-orange.png")
  ),
  iconWidth = 38, iconHeight = 88, ##设置大小
  iconAnchorX = 20, iconAnchorY = 88,
  shadowUrl = "http://leafletjs.com/examples/custom-icons/leaf-shadow.png",
  shadowWidth = 50, shadowHeight = 64,
  shadowAnchorX = 4, shadowAnchorY = 60
)

#生成地图
leaflet(data = quakes[1:20,]) %>% 
  addTiles() %>% ##添加背景地图
  addMarkers(~long, ~lat, icon = leafIcons)

设置图标后

2.3 设置 NASA 星空图

在生成地图的时候,可以添加多个地图底图,下面代码我们加入了三种地图以及圈点和轮廓的效果。得到的图形在右上角会出现一个选框,你可以根据自己的个人需求选择不同的展示结果。

library(leafletCN) ##leafletCN是一个基于leaflet的中国扩展包, 里面保存了一些适用于中国的区域划分数据以及一些有帮助的函数,例如高德地图
#数据生成
geo = data.frame(long = rep(121.44, 1000),
                 lat = rep(31.22, 1000),
                 mag=rep(5,1000)) #mag函数是用来衡量后面点集范围大小

geo$long = geo$long+rnorm(1000,0,1)
geo$lat = geo$lat+rnorm(1000,0,1)
geo$mag = geo$mag+rnorm(1000,0,1)
outline <- geo[chull(geo$long, geo$lat),]


map <- leaflet(geo) %>%
  
  # 底层阶段
  amap(group = "高德") %>%  # 第一层底图,高德地图                   
  addProviderTiles(providers$NASAGIBS.ViirsEarthAtNight2012, group = "黑底") %>%    # 第二层底图,黑底图NASA
  addProviderTiles(providers$Stamen.TonerLite, group = "白底") %>%     # 第三层底图,白底图
  
  # 点集+区域轮廓阶段
  addCircles(~long, ~lat, ~7^mag/50, stroke = F, group = "圈点",color="#FFD700") %>%     # 描点画圈
  
  # 绘制轮廓,利用前面的凸集点
  addPolygons(data = outline, lng = ~long, lat = ~lat,
              fill = F, weight = 2, color = "#B22222", group = "轮廓") %>% 
  
  # 复选框       
  addLayersControl( 
    baseGroups = c("高德", "黑底", "白底"),                     
    #显示层
    overlayGroups = c("圈点", "轮廓"),
    options = layersControlOptions(collapsed = FALSE)
  )
map

下面分给出底图为高德地图和黑底图的可视化结果:

显示底图为高德地图

显示底图为黑底图

3.保存图像

对于 leaflet 包生成的图像,如果要保存为 html 文件,可使用 htmlwidgets[4] 包中的 saveWidget() 函数;若要获取静态图像,要先将其保存为 html 文件,再使用 webshot[5] 包中的 webshot() 函数捕获静态图像。

小编有话说

  • 本篇主要介绍 《Geospatial Health Data》 一书中 leaflet 包和函数的基本使用方法并对其中的内容进行了扩展,此包可生成的地图非常丰富,更多内容可详见官网。
  • 本篇是空间地理数据可视化系列的第四期,主要由 林华师 制作。本系列的宗旨是带你系统学习如何使用 R 对空间地理数据进行可视化。下一期将会继续介绍 mapview 包的使用,敬请期待。

参考资料

[1]

《Geospatial Health Data》: https://www.paulamoraga.com/book-geospatial/sec-spatialdataandCRS.html

[2]

CSDN: https://blog.csdn.net/sinat_26917383/article/details/57083985?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162980815516780274121061%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162980815516780274121061&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-5-57083985.first_rank_v2_pc_rank_v29&utm_term=leaflet&spm=1018.2226.3001.4187

[3]

leaflet官网: https://leafletjs.com

[4]

htmlwidgets: https://github.com/ramnathv/htmlwidgets

[5]

webshot: https://github.com/wch/webshot

推荐: 可以保存以下照片,在 b 站扫该二维码,或者 b 站搜索【庄闪闪】观看 Rmarkdown 系列的视频教程。Rmarkdown 视频新增两节视频(写轮眼幻灯片制作)需要视频内的文档,可在公众号回复【rmarkdown

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:林华师

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 空间地理数据可视化之 tmap 包及其拓展

    本篇 R 可视化将继续介绍 《Geospatial Health Data》[1] 中用 R 包制作地图的相关内容,使用的包是 tmap ,创建出来的图像多种多...

    庄闪闪
  • 空间地理数据可视化之 ggplot2 包及其拓展

    上次 R 可视乎主要讲述了《Geospatial Health Data》[1]一书中关于空间地理数据可视化用 R 包制作地图的基础内容,参见 R可视乎|空间地...

    庄闪闪
  • Kaggle | 使用Python和R绘制数据地图的十七个经典案例(附资源)

    大数据文摘
  • 可视化流式地理空间数据

    最近参与了一个涉及流媒体信用卡交易数据并根据风险概率对其进行分类的项目。在此基础上,想探索可视化数据的选项。决定专注于地理方面,因为它是尝试识别欺诈性交易时的关...

    代码医生工作室
  • R可视乎|空间地理数据可视化(1)

    研究生讨论班第一次用 slides 作报告,主要讲了《Geospatial Health Data》[1]一书中关于空间地理数据可视化的内容。文末给出对应的 p...

    庄闪闪
  • 动态地理信息可视化——leaflet在线地图简介

    最近稍微涉猎了一下leaflet这个包,突然感到发现了动态可视化的新大门,这个包所提供的地图类型、动态效果、图层展示方式都大大扩展了ggplot作图系统的在数据...

    数据小磨坊
  • 实验3 地理空间数据可视化

    实验结果:(1)自己家乡及其位置信息;(2)图8-10,可以手绘,可以文字描述,也可以将图缩小打印贴上;

    步行者08
  • 使用kepler.gl可视化地理空间数据

    一个精美的图片!我特别喜欢城市周围的线条,它们交织在一起,呈现出一幅非常精确的城市地图的实际面貌。这个可视化地理空间数据是我最喜欢的项目之一。

    磐创AI
  • 使用Python中的folium包创建热力密度图

    最近探索出来一个在Python中创建热力图非常高效的方法,使用folium包来创建热力图,实际效果非常赞,过程简单,代码量少。

    数据小磨坊
  • 用可视化地图讲照片的故事(Python+Leaflet)

    手机和数码相机拍的照片里除了我们能看到的RGB像元数据,还包含了拍摄时间、图像分辨率、感光值、GPS坐标等属性,记录在Exif(Exchangeable ima...

    数据森麟
  • 用可视化地图讲照片的故事(Python+Leaflet)

    手机和数码相机拍的照片里除了我们能看到的RGB像元数据,还包含了拍摄时间、图像分辨率、感光值、GPS坐标等属性,记录在Exif(Exchangeable ima...

    蛰虫始航
  • Python中最好用的6个地图可视化库

    地理空间数据无处不在:在这次新冠肺炎大流行中,我们见识到了各种地理空间数据可视化工具制作出的各种风格的地图。而对Python的使用者来说,有几个非常强大的库可以...

    DataCharm
  • leaflet在线地图进阶宝典之——高级辅助特性

    本文跟大家分享leaflet在线地图的高级附加属性,这些属性通常来讲仅仅作为我们数据额可视化项目的修饰元素,而并不会影响数据元素。 但是有了这些辅助修饰元素,往...

    数据小磨坊
  • 目前最全,可视化数据工具大集合

    数据可视化技术的基本思想是将数据库中每一个数据项作为单个图元元素表示,大量的数据集构成数据图像, 同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观...

    BestSDK
  • 使用R语言对进行地理空间数据可视化

    每次shooting的位置在下面的地图上用红色圆圈标记。圆圈的大小取决于死亡人数。

    拓端
  • Leaflet在线地图进阶宝典——json素材操纵与图层面板控制

    这篇教程憋了很久,其实算是3个月前leaflet在线地图系列的进阶篇,但是因为当时对于leaflet地图的数据源结构理解有限,技能勉强操控shp数据源,对于js...

    数据小磨坊
  • 手把手|如何用Python绘制JS地图?

    大数据文摘
  • leaflet的小搭档leaflet.minicharts来了,从此动态地图又多了一些乐趣~~~

    本文内容取材自leaflet.minicharts包官方主页的案例介绍,本篇案例虽然是关于leaflet在线地图的辅助包,但是该包的出现对于leaflet生态系...

    数据小磨坊
  • leaflet在线地图之热力密度图

    之前在练习leaflet的时候没有找到R语言leaflet中的热力密度图接口函数,一直感觉很遗憾。

    数据小磨坊

扫码关注云+社区

领取腾讯云代金券