在R中使用经纬度坐标为地图点位添加按计数区分的颜色分段标识
R语言leaflet站点地图绘制代码修正方案
问题排查
原有代码存在4个核心错误:
cbind拼接字符、数值类型数据时,所有值被强制转换为字符型,count字段的数值大小判断逻辑完全失效st_as_sf转换空间对象时未指定坐标列和坐标系,无法正确识别经纬度信息- 图标配置阶段调用
getColor函数时传入了不存在的变量top100_start_station_cordinates,直接触发运行报错 - 标注逻辑拆分了站点名称和计数的展示,不符合需求中同时标注两类信息的要求
修正后完整代码
# 未安装依赖包请先运行安装,已安装可跳过 install.packages(c("leaflet", "sf")) library(leaflet) library(sf) # 构造示例数据集,你的真实数据可直接替换该部分 start_stations <- data.frame( station = c("StreeterDr", "MichiganAve", "WellsSt"), lat = c(41.89228, 41.90096, 41.91213), lng = c(-87.61204,-87.62378,-87.63466), n = c(23000, 56780, 34520) ) # 整理目标数据集,保留各字段原始类型 dfs <- data.frame( lon = start_stations$lng, lat = start_stations$lat, name = start_stations$station, count = start_stations$n ) # 转换为sf空间对象,指定坐标列和WGS84坐标系 dfs<- st_as_sf(dfs, coords = c("lon", "lat"), crs = 4326) # 计数到颜色的映射函数 getColor <- function(dfs) { sapply(dfs$count, function(count) { if(count <= 20000) { "green" } else if(count <= 30000) { "orange" } else { "red" } }) } # 图标配置,传入正确的数据集参数 icons <- awesomeIcons( icon = 'ios-close', iconColor = 'black', library = 'ion', markerColor = getColor(dfs) ) # 绘制地图,弹窗同时展示站点名称和计数值 leaflet(dfs) %>% addTiles() %>% addAwesomeMarkers( icon=icons, popup = ~paste0("站点名称:", name, "<br>计数值:", count), label=~as.character(count) )
内容的提问来源于stack exchange,提问作者KalsaraL
相关产品推荐
相关产品推荐

