Leaflet Legend для пользовательских маркеров в R

У меня есть приложение R Shiny, которое использует Leaflet для создания интерактивной карты. На этой карте категориальная переменная используется для обозначения различных типов точек и визуализируется с помощью пользовательских маркеров (различные значки в зависимости от уровня фактора).

То, что я хотел бы сделать, это добавить легенду к сюжету, но чтобы легенда отображала различные значки маркеров вместо сплошных цветов.учебник легенд не распространяется на это.

Я сталкивался с другимТАК ответ, который, кажется, решить эту проблему - но это было сделано в 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)
 alistaire16 июн. 2016 г., 16:48
Если это работает, возможно, самый простой способ - просто использовать JavaScript.

Ответы на вопрос(2)

Решение Вопроса

Хотя использование иконокв настоящее время не реализовано в addLegend () Yihui предложил использовать addControl (), используя raw 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'>green<br/>
<img src='http://leafletjs.com/docs/images/leaf-red.png'>red"

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

Который производит:

 wraymond16 авг. 2016 г., 18:11
Пробовал это, и это работает, но значки в легенде действительно большие. Есть ли способ изменить их размер в коде html_legend или addControl ()?
 Twitch_City16 авг. 2016 г., 18:30
Да, размер значков определяется в вызове icons (), в приведенном выше примере он имеет ширину 38 пикселей и высоту 95 пикселей.

Отвечая на комментарий выше: вы можете изменить размер значков в легенде, независимо от исходного размера, который вы определяете. Все, что вам нужно сделать, это добавить

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")

Ваш ответ на вопрос