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

如何在Python的OSMnx中基于speed_kph值条件化绘制道路边?

当然可以实现!

你已经完成了获取路网、添加速度数据的关键步骤,接下来只需要根据speed_kph属性动态生成边的颜色列表,再传给OSMnx的绘图函数即可。下面是具体的实现思路和代码示例:

方法一:基于Matplotlib的静态绘图(对应你用的ox.plot_graph)

  1. 先定义你的速度阈值A和对应颜色X/Y:

    # 替换成你实际需要的阈值和颜色
    speed_threshold = 50
    color_high_speed = '#ff4500'  # 高速道路用橙红色
    color_low_speed = '#3366cc'   # 低速道路用深蓝色
    
  2. 遍历路网的所有边,根据speed_kph值匹配对应颜色:

    # 生成每个边对应的颜色列表,同时处理可能缺失speed_kph的情况
    edge_colors = []
    for _, _, edge_data in map_cons_speed.edges(data=True):
        current_speed = edge_data.get('speed_kph')
        # 判断:如果速度存在且大于阈值,用高速颜色,否则用低速颜色
        if current_speed is not None and current_speed > speed_threshold:
            edge_colors.append(color_high_speed)
        else:
            edge_colors.append(color_low_speed)
    
  3. 调用ox.plot_graph时,把生成的edge_colors传给edge_color参数:

    ox.plot_graph(
        map_cons_speed,
        bgcolor='#FFFFFF',
        edge_color=edge_colors,
        node_color='#000000',
        node_size=10  # 可以调小节点大小,让道路颜色更突出
    )
    

方法二:用GeoDataFrame简化颜色生成

如果你已经把路网转成了gdf_edges,也可以直接用Pandas的apply方法快速生成颜色列,再提取为列表:

# 给gdf_edges添加颜色列
gdf_edges['edge_color'] = gdf_edges['speed_kph'].apply(
    lambda x: color_high_speed if (x is not None and x > speed_threshold) else color_low_speed
)

# 提取颜色列表传给绘图函数
ox.plot_graph(
    map_cons_speed,
    bgcolor='#FFFFFF',
    edge_color=gdf_edges['edge_color'].tolist(),
    node_color='#000000'
)

额外提示:处理缺失的速度数据

有些道路可能没有speed_kph属性(比如数据缺失),上面的代码已经通过current_speed is not None做了判断,你也可以给这类边单独设置一个默认颜色(比如灰色#888888),让可视化更严谨。

内容的提问来源于stack exchange,提问作者Dlinnard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:29:07