原标题:Leaflet for R包(三) 符号标记

四、标记

点标记在地图符号化的时候,是最常用的功能之一,一般来说,带有经纬度坐标的点信息,在地图上标志的位置,都会通过一个标记物来实现,很多时候把这个东东称之为“图钉”是非常形象的。

标记的方法名和语法如下:

addMarkers(leaflet地图,数据)

表示把这个数据加载到地图里面,示例如下:

df = data.frame(

latitude = runif(20,min=0,max=70),

longitude = runif(20,min=0,max=160)

)

m

m

addMarkers(m,lng=~longitude,lat=~latitude)

#管道操作符写法

df%>%leaflet()%>%addTiles()%>% addMarkers()

可以看见,如果你的列名直接叫做(lat/latitude 以及 lon/lng/long/longitude)的话,是不用显示去声明的,系统会去自动查找,然后作为经度、纬度来进行使用。

下面我们来加载一批数据看看:

这是一批北京市三级医院的数据,需要这份示例数据的,可以通过公众号获取虾神的邮箱,然后发送邮件给我获取。

bj3H

leaflet(bj3H)%>%addTiles()%>% addMarkers(popup=~mc)

当我们的坐标字段,就叫做(latitude/longitude)的时候,方法会自动的去匹配,当然,如果你不叫做这个,比较你叫做xy或者中文的啥,也可以进行显式申明,如下:

首先定义一个自定义的数据框,只有三个列,分布是x,y,mc

dh

内容如下:

如果还是直接写,会出现错误提示,说找不到经纬度的列

像这种情况,就需要进行显式申明了:(顺便换个背景底图)

leaflet(dh)%>%addProviderTiles("Esri.WorldStreetMap")%>%setView(116.4,39.9,zoom=10)%>%addMarkers(~x,~y,popup=~mc)

如果你觉得这种默认的图钉样式不好看,还可以定制自己的符号,比如我下面想用红十字来表示医院:

首先用makeIcon这个方法,来定义一个图标,注意里面Url必须是要用http模式,我这里用csdn提供的免费图床,本地硬盘上的图片好像是不能直接用的。(ps:如果不想用互联网的图床,也可以在本地开启一个web服务器,使用url方式来引用)。

makeIcon的语法如下:

iconUrl: 图标的url地址

iconWidth:图标的宽度

iconHeight: 图标的高度

iconAnchorX:图标的中心点x轴偏移(以左上角为0,0)

iconAnchorY:图标的中心点Y轴偏移(以左上角为0,0)

redIcon

iconUrl = "https://img-blog.csdn.net/20161015170050664",

iconWidth = 38, iconHeight = 38,

iconAnchorX = 19, iconAnchorY = 19

)

leaflet(bj3H[])%>%addTiles()%>%

addMarkers(popup=~mc,icon = redIcon)

有时候还需要配置不同的图标来显示不同的内容,当然最简单的方式就是分批次加载不同的数据:先定义两个不同的符号,然后筛选数据,分批次加载,三级医院用传统红十字,三级甲等用镶边红十字,如下:

redIcon1

iconUrl = "https://img-blog.csdn.net/20161015170050664",

iconWidth = 38, iconHeight = 38,

iconAnchorX = 19, iconAnchorY = 19

)

redIcon2

iconUrl = "https://img-blog.csdn.net/20161015173507516",

iconWidth = 38, iconHeight = 38,

iconAnchorX = 19, iconAnchorY = 19

)

leaflet()%>%addTiles()%>%

addMarkers(data=bj3H[bj3H$dj=="三级",],popup=~mc,icon = redIcon1)%>%

addMarkers(data=bj3H[bj3H$dj=="三级甲等",],popup=~mc,icon = redIcon2)

这种方法虽然比较容易控制,但是语法稍微显得有些繁琐了,leaflet的makeIcon包还支持r语言提供的ifelse()函数进行设定,如下所示:(为了表示是重新运行过的,换个底图)

leafIcons

iconUrl = ifelse(bj3H$dj=="三级",

"https://img-blog.csdn.net/20161015170050664",

"https://img-blog.csdn.net/20161015173507516"

),

iconWidth = 38, iconHeight = 38,

iconAnchorX = 19, iconAnchorY = 19

)

leaflet(bj3H)%>%addProviderTiles("CartoDB.Positron")%>%

addMarkers(popup=~mc,icon = leafIcons)

当然,以此类推,还可以修改符号大小神马啊,设定符号等级啊神马的,我这里就不一一说明了,大家有兴趣自己玩。

还有同学问,如果我有很多类图标呢?比如二十类……虾神咋办?好吧,如果你有超过3类图标的话,要么用第一种方法筛选加载,要么的话,leaflet还提供了一个叫做iconList的方法来处理。

比如上面这份医疗数据,一共分成10种类型:(用summary方法做个统计)

fl

那么下面我用十种不同类型的图标,来进行分类标识:

yyIcons

中国医科院所属医院 = makeIcon("https://img-blog.csdn.net/20161015181859390", iconWidth =32, iconHeight = 32),

北京区县属医院 = makeIcon("https://img-blog.csdn.net/20161015182217958", iconWidth =32, iconHeight = 32),

北京市卫生局直属医院= makeIcon("https://img-blog.csdn.net/20161015181915828",iconWidth =32, iconHeight = 32),

北京中医药大学= makeIcon("https://img-blog.csdn.net/20161015181934175",iconWidth =32, iconHeight = 32),

卫生部直属医院= makeIcon("https://img-blog.csdn.net/20161015181950879",iconWidth =32, iconHeight = 32),

中国中医科学院= makeIcon("https://img-blog.csdn.net/20161015182031737",iconWidth =32, iconHeight = 32),

驻京武警医院= makeIcon("https://img-blog.csdn.net/20161015182043285",iconWidth =32, iconHeight = 32),

驻京部队医院= makeIcon("https://img-blog.csdn.net/20161015182054598",iconWidth =32, iconHeight = 32),

部属厂矿高校医院= makeIcon("https://img-blog.csdn.net/20161015182109473",iconWidth =32, iconHeight = 32),

北京大学附属医院= makeIcon("https://img-blog.csdn.net/20161015182132521",iconWidth =32, iconHeight = 32)

)

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron") %>%

addMarkers(icon = ~yyIcons[fl],popup=~fl)

当数据太多的时候,很容易叠加在一起互相遮盖了,leaflet还提供了空间聚合的方法,可以按照视图对一定范围内的数据进行聚合显示,如下:

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron") %>%

addMarkers(clusterOptions = markerClusterOptions(),icon = ~yyIcons[fl],popup=~fl)

可以看见,随着视图比例尺的变化,会进行聚合以及分离

而如果不想弄得这么麻烦,就是直接把点显示出来,leaflet提供了最简单的方法:

addCircles()和addCircleMarkers()

addCircles就是直接把点当成一个圆点绘制到地图上:

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircles()

默认大小为5,颜色为蓝色

当然也可以设置颜色和大小,比如设置为红色,大小为科室数量(等比例的缩小一半):

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircles(color="red",weight=bj3H$ks/2)

而addCircleMarkers()是把点作为一个镶边的圆(或者说圆符号)绘制到地图上:

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircleMarkers()

当然,同样可以设置大小和颜色:

leaflet(bj3H) %>%addProviderTiles("CartoDB.Positron")%>%addCircleMarkers(color="red",weight=bj3H$ks/2)

和绘制图标一样,绘制点和圆也是可以设置分类显示的,方法和绘制不同种类的图标一样,两种方法:

1、采用筛选的方式,多次绘制(这个比较麻烦,数据量大,种类多的时候很繁琐)

leaflet()%>%addTiles()%>%addProviderTiles("CartoDB.Positron")%>%

addCircles(data=bj3H[bj3H$dj=="三级",],popup=~mc,color="green")%>%

addCircles(data=bj3H[bj3H$dj=="三级甲等",],popup=~mc,color="red")

leaflet()%>%addTiles()%>%addProviderTiles("CartoDB.Positron")%>%

addCircleMarkers(data=bj3H[bj3H$dj=="三级",],popup=~mc,color="green")%>%

addCircleMarkers(data=bj3H[bj3H$dj=="三级甲等",],popup=~mc,color="red")

2、就是采用分类设定的方式,预先设定好各种分类:(因为addCircles和addCircleMarkers)两个方法几乎一模一样,我就不把两个都写一遍了,有兴趣的同学自己嗨。

pal

leaflet(bj3H) %>% addProviderTiles("Esri.WorldTopoMap") %>%

addCircleMarkers(color = ~pal(dj),stroke = FALSE,fillOpacity = 0.7)

可以看见,我们只写了两个分类,如果要更多的类别,也是可以的。

那么很多时候,我们可能还需要通过通过数值来进行不同等级的颜色渲染,下面根据每个医院的床位数进行颜色渲染,代码如下:(代码具体的意义,在后面讲图例的时候,我们还会详细说明)

cPal

leaflet(bj3H) %>% addProviderTiles("Esri.WorldTopoMap") %>%

addCircleMarkers(fillColor = ~cPal(bj3H$cws),stroke = FALSE,fillOpacity = 0.8,popup=~as.character(cws))%>%

addLegend("bottomright", pal = cPal, values = ~cws,title = "床位数",labFormat = labelFormat(suffix = "张"),opacity = 1)

责任编辑:

leaflet沿线标注_Leaflet for R包(三) 符号标记相关推荐

  1. leaflet沿线标注_LeaFlet学习之地图文字标注

    在地图上进行一些文字的标注有些场景我们会用到,在这里我们文字标注用到了DivICon图标,通过与mark相结合,将mark的图标设置为DivICon图标,进行文字标注,放张图看看效果: 一.全部代码 ...

  2. Shiny平台构建与R包开发(三)——数据输出

    作为Shiny平台构建与R包开发教程的第三小节,本节向读者展示如何利用Shiny server输出自己想要的数据,包括Rplot.Table.Text等信息. 数据输出机制 仍以上一节的案例为基础: ...

  3. 三十三、五大数据处理的R包

    @Author : By Runsen @Date : 2020/5/14 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘 ...

  4. 使用R语言的正确姿势,R包干货奉献

    生物信息学习的正确姿势 NGS系列文章包括NGS基础.在线绘图.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程).单细胞 ...

  5. R包中文文本挖掘chinese.misc的中文说明

    转载:https://github.com/githubwwwjjj/chinese.misc 中文文本分析方便工具R包chinese.misc的中文说明 很多人都问过的问题: (1)哪里有更多介绍? ...

  6. 【R语言】使用leaflet绘制沈阳地铁线路图——R实训第六次作业

    参考: 一.惭愧惭愧,基本都是抄自这个大牛学长,自己做了一部分改进--R语言绘制沈阳地铁线路图 二.这个发布的时间比学长还要早(学长可能也借鉴过)--上海地铁数据可视化 三.这个是真正的大牛,从他的文 ...

  7. Python的数据科学函数包(三)——matplotlib(plt)

    Matplotlib是Python最著名的2D绘图库 c opencv要比PIL, plt的速度更快一些 matplotlib中一张图的具体构造 如果将Matplotlib绘图和我们平常画画相类比,可 ...

  8. Shiny平台构建与R包开发(四)——按钮与响应事件

    作为Shiny平台构建与R包开发教程的第四小节,本节向读者进一步强调Shiny server的工作机理,并由此设计按钮点击事件. Shiny server工作机理与问题 前面的几个小节已经向读者初步解 ...

  9. Shiny平台构建与R包开发(二)——数据输入

    作为Shiny平台构建与R包开发教程的第二小节,本节向读者介绍如何利用Shiny server处理用户输入的各种信息.这些信息既包括用户向Shiny上传的数据集,也包括用户对Shiny页面的各种控件( ...

  10. Shiny平台构建与R包开发

    Introduction 在数据库网页搭建教程中已经提到,数据分析决策平台的搭建十分重要.数据库网页是数据分析决策平台的重要表现形式之一,能够很好地将大量数据或其分析结果公开展示,并能提供数据下载.统 ...

最新文章

  1. Java Semaphore实现线程池任务调度
  2. MySQL几个特别语法示例
  3. 16-CoreData之多表关联(存储自定义数据模型)
  4. mysql 临时表 heap_mysql优化: 内存表和临时表
  5. 剑指offer 56 - 1.数组中数字出现的次数
  6. Linux学习笔记14
  7. GUID基本概念以及C#、SqlServer中GUID基本用法
  8. 机器学习实战(五)支持向量机SVM(Support Vector Machine)
  9. 2021年中国一氧化碳传感器市场趋势报告、技术动态创新及2027年市场预测
  10. python和java学哪个好-Python和Java学哪个好?大家是怎么选的
  11. [leetcode] 65. 有效数字
  12. 关于删除 srvinstw安装的服务
  13. vs离线安装Qt开发插件vsix
  14. phpstudy下载、安装、配置、网站部署、卸载
  15. 中国人工智能神经网络技术现状
  16. 对标TJA1043 SIT1043 带唤醒及故障保护的低功耗CAN FD总线收发器
  17. 装修后才知道的79件事,无数网友真金白银砸出来...
  18. Hadoop生态系统全面介绍
  19. 为什么是UUID做主键
  20. FTDI的LibMPSSE编译流程

热门文章

  1. ImageLoader----内存缓存
  2. typedef struct LNode *p和typedef struct LNode笔记
  3. 新大陆扫描枪设置指南
  4. seo与sem的区别
  5. 我最喜爱的九位历史人物 - 苏轼(Space搬家)
  6. mysql实体完整性实现方法_mysql 完整性约束
  7. 空间滤波器 平滑滤波器 锐化滤波器
  8. SI24R1切换收发模式问题调试与解决
  9. 有哪些国外常用的论文网站
  10. 微信8.0表情没有特效怎么回事