如何在Python的OSMnx中基于speed_kph值条件化绘制道路边?
当然可以实现!
你已经完成了获取路网、添加速度数据的关键步骤,接下来只需要根据speed_kph属性动态生成边的颜色列表,再传给OSMnx的绘图函数即可。下面是具体的实现思路和代码示例:
方法一:基于Matplotlib的静态绘图(对应你用的ox.plot_graph)
先定义你的速度阈值
A和对应颜色X/Y:# 替换成你实际需要的阈值和颜色 speed_threshold = 50 color_high_speed = '#ff4500' # 高速道路用橙红色 color_low_speed = '#3366cc' # 低速道路用深蓝色遍历路网的所有边,根据
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)调用
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
相关产品推荐
相关产品推荐

