r - R 中的传单 : Select icons or CircleMarkers based on factor variable

标签 r leaflet

我想根据数据框中的因子变量在 R 的传单图中使用不同的图标。因子变量可能有 100 个不同的级别,但我只有几个级别的图标,可能有 10 个左右。如果有一个图标我想使用它,否则绘制 CircleMarkers。

我可以用 for 循环来做到这一点:

library(leaflet)

# Some icons
fruits_icons <- iconList(
  apple = makeIcon("apple.png", iconWidth = 20, iconHeight = 20),
  banana = makeIcon("banana.png", iconWidth = 20, iconHeight = 20)
)

# Some data
latitude <- 48 + runif(20)
longitude <- 10 + runif(20)
fruit <- sample(c("banana", "apple", "pear"), 20, replace = TRUE)
df <- data.frame(latitude, longitude, fruit)

map <- leaflet(df) %>% addTiles()

# check if fruit is in names(icons), then use icons, else circles
for(i in seq_len(nrow(df))){
  if(df$fruit[i] %in% names(fruits_icons)){
    map <- map %>% addMarkers(lng = df$longitude[i], 
                              lat = df$latitude[i], 
                              icon = ~fruits_icons[df$fruit[i]])
  } else {
    map <- map %>% addCircleMarkers(lng = df$longitude[i], 
                                    lat = df$latitude[i])
  }
}

map

有没有更好的方法可以在不使用 for 循环的情况下实现此目的?

最佳答案

您可以在每个 add*() 方法中对要使用的数据进行子集化

leaflet() %>% addTiles() %>%
  addMarkers(data = df[df$fruit %in% names(fruits_icons),], 
             lng = ~longitude, 
             lat = ~latitude, 
             icon = ~fruits_icons[fruit]) %>%
  addCircleMarkers(data = df[!df$fruit %in% names(fruits_icons), ],
                   lng = ~longitude,
                   lat = ~latitude)

关于r - R 中的传单 : Select icons or CircleMarkers based on factor variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41192421/

相关文章:

javascript - Leaflet 1.0.0-rc3 removeFrom()方法导致 "is not a function"错误

javascript - 在传单中的标记之间画线

javascript - 传单叠加顺序(点、线和多边形)

r - 粘贴是绘图数学表达式中的特殊参数吗?

r - 寻找 "vectorized"版本来存储矩阵中向量元素的差异

r - 在测试数据上使用 LARS 模型进行预测时出现错误消息

r - 在 Dockerfile 中添加用于从 Github 安装的 R 包

javascript - leaflet js中Z代表什么

R 绘制匹配传单 map 中选定多边形的图

regex - 正则表达式用于替换未用方括号括起来的子字符串出现的情况