You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按分组设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:55:26