如何按分组设置Leaflet地图圆形标记的填充颜色?
按分组设置Leaflet圆形标记填充颜色的方法
方法1:直接用条件语句生成颜色列
你可以在数据中新增一列,根据state字段匹配对应的填充颜色,之后在addCircleMarkers中引用这个列即可。
修改后的完整代码如下:
# Import needed libraries library(tidyverse) library(leaflet) library(sf) # Create example dataset aa <- data.frame( state = c('Virginia','Virginia','North Carolina', 'North Carolina'), city = c('Richmond','Charlottesville', 'Raleigh', 'Charlotte'), lat = c(37.53,38.01,35.78,35.22), lon = c(-77.44,-78.47,-78.63,-80.84)) %>% st_as_sf(coords = c('lon', 'lat'), crs = 4269) %>% mutate(lat = st_coordinates(.)[, 2], lon = st_coordinates(.)[, 1], # 根据州设置对应填充颜色 fill_color = case_when( state == 'Virginia' ~ 'yellow', state == 'North Carolina' ~ 'green', # 其他情况设置默认颜色 TRUE ~ 'gray' )) # 生成地图 aa %>% leaflet(options = leafletOptions(attributionControl = F, zoomControl = F)) %>% addTiles() %>% addProviderTiles("Esri.WorldImagery") %>% setView(-78.47, 36.53, zoom = 7) %>% addCircleMarkers(lng = ~lon, lat = ~lat, fillColor = ~fill_color, # 引用新增的颜色列 fillOpacity = 1, color = 'black', stroke = TRUE, weight = 2, radius = 5)
方法2:使用colorFactor创建颜色映射
如果分组较多,用colorFactor函数可以更灵活地管理颜色与分组的对应关系,还能自动生成图例(可选)。
代码示例:
# Import needed libraries library(tidyverse) library(leaflet) library(sf) # Create example dataset aa <- data.frame( state = c('Virginia','Virginia','North Carolina', 'North Carolina'), city = c('Richmond','Charlottesville', 'Raleigh', 'Charlotte'), lat = c(37.53,38.01,35.78,35.22), lon = c(-77.44,-78.47,-78.63,-80.84)) %>% st_as_sf(coords = c('lon', 'lat'), crs = 4269) %>% mutate(lat = st_coordinates(.)[, 2], lon = st_coordinates(.)[, 1]) # 创建颜色映射器:指定分组对应的颜色 state_color <- colorFactor( palette = c('yellow', 'green'), domain = c('Virginia', 'North Carolina') ) # 生成地图(可选添加图例) aa %>% leaflet(options = leafletOptions(attributionControl = F, zoomControl = F)) %>% addTiles() %>% addProviderTiles("Esri.WorldImagery") %>% setView(-78.47, 36.53, zoom = 7) %>% addCircleMarkers(lng = ~lon, lat = ~lat, fillColor = ~state_color(state), # 应用颜色映射 fillOpacity = 1, color = 'black', stroke = TRUE, weight = 2, radius = 5) %>% addLegend("bottomright", # 可选添加图例,方便查看分组与颜色对应 pal = state_color, values = ~state, title = "State", opacity = 1)
这两种方法都能实现你的需求:弗吉尼亚州的标记填充为黄色,北卡罗来纳州的填充为绿色。第二种方法更适合后续扩展分组的场景,还能快速添加图例增强可读性。
内容的提问来源于stack exchange,提问作者tassones
相关产品推荐
相关产品推荐

