我想根据数据框中的因子变量在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循环,有没有更好的方法呢?
答案 0 :(得分:3)
您可以将要在每个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)