2016-06-16 5 views
8

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

Что бы я хотел сделать, это добавить легенду к сюжету, но легенда показывает различные значки маркеров вместо сплошных цветов. 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) 
+0

Если это работает, самый простой способ, вероятно, только к источнику JavaScript. – alistaire

ответ

4

Хотя использование иконок в addLegend() not currently implemented, Yihui предложил использовать 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/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") 

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

Leaflet Map with Categorical Legend

+0

Пробовал это, и он работает, но значки в легенде действительно большие. Есть ли способ изменить их размер в коде html_legend или addControl()? – wraymond

+0

Да, размер значка определяется в вызове icons(), в приведенном выше значении установлено значение 38px wide и высотой 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") 
Смежные вопросы