使用R的Leaflet为航班航线按状态设置不同颜色的问题
嘿,这问题我熟!你现在的代码里addPolylines(color="red")是把所有航线都统一设成红色了,要根据Status区分颜色,关键是把每条航线和对应的Status绑定起来,再用leaflet的颜色映射功能实现。
修改后的完整代码
# 生成对应所有航班的航线空间对象(每行坐标对应一条航线) routes_sp <- gcIntermediate(coord1[,c(1,2)], coord1[,c(3,4)], n=100, addStartEnd=TRUE, sp=TRUE) # 把Status属性绑定到空间对象,转换成带属性的SpatialLinesDataFrame routes_df <- SpatialLinesDataFrame( routes_sp, data = data.frame(Status = coord1$Status, row.names = names(routes_sp)) ) # 创建颜色映射规则:delayed对应蓝色,cancelled对应红色 status_colors <- colorFactor( palette = c(delayed = "blue", cancelled = "red"), domain = coord1$Status ) # 绘制地图,航线颜色自动匹配Status leaflet(routes_df) %>% addTiles() %>% setView(-100, 38, zoom = 4.49) %>% addPolylines(color = ~status_colors(Status)) %>% # 用~引用属性列实现动态颜色 addMarkers(lng = c(coord1[,1], coord1[,3]), lat = c(coord1[,2], coord1[,4]))
关键步骤说明
gcIntermediate处理多行坐标时,会自动为每一行生成一条独立航线,返回的SpatialLines对象里每条线对应coord1的一个航班。- 通过
SpatialLinesDataFrame把coord1的Status列绑定到空间对象上,这样每条航线都有了自己的状态属性。 - 用
colorFactor创建颜色映射时,我用了命名向量来指定颜色,这样不管Status的因子水平顺序是什么,颜色都能精准匹配,避免出错。 - 最后在
addPolylines里用~status_colors(Status),告诉leaflet根据每条航线的Status属性自动选择对应颜色。
内容的提问来源于stack exchange,提问作者Gus CR
相关产品推荐
相关产品推荐

