我想根据数据框中的因子变量在 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/