R中自定义标记的传单图例

Posted

技术标签:

【中文标题】R中自定义标记的传单图例【英文标题】:Leaflet Legend for Custom Markers in R 【发布时间】:2016-10-18 03:56:30 【问题描述】:

我有一个使用 Leaflet 创建交互式地图的 R Shiny 应用程序。在这张地图上,分类变量用于指定不同类型的点,并使用自定义标记(不同的图标,取决于因子级别)进行可视化。

我想做的是在情节中添加一个图例,但让图例显示各种标记图标而不是纯色。 legends tutorial 不包含此内容。

我遇到了另一个 SO answer that seems to solve this - 但它是用 javascript 完成的,我不知道如何翻译它/是否可以翻译成在 R 中工作。有人知道如何完成这个吗?

一个基本的可重现示例:

library(leaflet)

# Sample Data
data(quakes)
quakes <- quakes[1:10,]

# Choose Icon:
leafIcons <- icons(
  iconUrl = ifelse(quakes$mag < 4.6,
                   "http://leafletjs.com/docs/images/leaf-green.png",
                   "http://leafletjs.com/docs/images/leaf-red.png"
  ),
  iconWidth = 38, iconHeight = 95,
  iconAnchorX = 22, iconAnchorY = 94)

# Produce Map:
leaflet(data = quakes) %>% addTiles() %>%
  addMarkers(~long, ~lat, icon = leafIcons)

【问题讨论】:

如果可行,最简单的方法可能就是获取 JavaScript 源代码。 【参考方案1】:

虽然在 addLegend() 中使用的图标是 not currently implemented,但易辉建议使用 addControl(),使用原始 html - 效果很好!

library(leaflet)

# Sample Data
data(quakes)
quakes <- quakes[1:10,]

# Choose Icon:
leafIcons <- icons(
  iconUrl = ifelse(quakes$mag < 4.6,
                   "http://leafletjs.com/examples/custom-icons/leaf-green.png",
                   "http://leafletjs.com/examples/custom-icons/leaf-red.png"
  ),
  iconWidth = 38, iconHeight = 95,
  iconAnchorX = 22, iconAnchorY = 94)

html_legend <- "<img src='http://leafletjs.com/examples/custom-icons/leaf-green.png'>green<br/>
<img src='http://leafletjs.com/examples/custom-icons/leaf-red.png'>red"

# Produce Map:
leaflet(data = quakes) %>% addTiles() %>%
  addMarkers(~long, ~lat, icon = leafIcons) %>%
  addControl(html = html_legend, position = "bottomleft")

链接

绿色:http://leafletjs.com/examples/custom-icons/leaf-green.png 红色:http://leafletjs.com/examples/custom-icons/leaf-red.png 橙色:http://leafletjs.com/examples/custom-icons/leaf-orange.png

产生:

【讨论】:

试过了,它可以工作,但图例中的图标真的很大。有没有办法在 html_legend 代码或 addControl() 中调整它们的大小? 是的,图标大小是在 icons() 调用中定义的,在上面它们被设置为 38px 宽和 95px 高。【参考方案2】:

回应上面的评论:你可以改变图例中图标的大小,不管你定义的初始大小。你所要做的就是添加

style='width:(desired_width)px;height:(desired_height)px'; 到 HTML 部分。

具体来说,您的代码希望:

library(leaflet)

# Sample Data
data(quakes)
quakes <- quakes[1:10,]

# Choose Icon:
leafIcons <- icons(
iconUrl = ifelse(quakes$mag < 4.6,
               "http://leafletjs.com/docs/images/leaf-green.png",
               "http://leafletjs.com/docs/images/leaf-red.png"
  ),
  iconWidth = 38, iconHeight = 95,
  iconAnchorX = 22, iconAnchorY = 94)

html_legend <- "<img src='http://leafletjs.com/docs/images/leaf-green.png'
style='width:10px;height:10px;'>green<br/> 

<img src='http://leafletjs.com/docs/images/leaf-red.png'  
style='width:10px;height:10px;'>red"

# Produce Map:
leaflet(data = quakes) %>% addTiles() %>%
addMarkers(~long, ~lat, icon = leafIcons) %>%
addControl(html = html_legend, position = "bottomleft")

【讨论】:

以上是关于R中自定义标记的传单图例的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ggplot2 中自定义图例?

带有反应传单的自定义标记图标

传单:如何将文本标签添加到自定义标记图标?

闪亮的传单地图上的自定义标记

在 R Shiny 中的 Leaflet 中创建具有自定义绝对位置的图例

带有自定义图块的传单地图上的标记位置随着更高的缩放级别而变化