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

osmnx.plot_graph边缘颜色分配规则及OSM公路标签着色方法

OSMNX plot_graph函数边缘颜色分配规则及highway标签配色方案

边缘颜色分配核心规则

ox.plot_graph的edge_color参数遵循以下匹配逻辑:

  • 传入单个颜色值时,所有路网边缘统一使用该颜色渲染
  • 传入颜色列表时,列表顺序与图的边序列顺序一一对应,第N个列表值对应第N条边的渲染颜色,列表长度必须与图的总边数完全相等,否则会出现颜色分配错乱,这也是实测和教程结果不符的最常见原因:不同区域下载的OSM路网边的数量、排序都和教程示例不一致,直接套用教程的固定长度颜色列表必然会匹配错误

按OpenStreetMap的highway标签自定义配色方案

你可以通过手动映射highway属性的方式生成符合顺序要求的颜色列表,步骤如下:

  1. 首先定义不同highway类型对应的自定义颜色映射
road_color_map = {
    "motorway": "#e31a1c",
    "trunk": "#fd8d3c",
    "primary": "#fecc5c",
    "secondary": "#ffffb2",
    "tertiary": "#addd8e",
    "residential": "#4d4d4d",
    "unclassified": "#737373",
    "footway": "#969696",
    "cycleway": "#7fcdbb"
}
  1. 处理路网边的highway属性,避免部分属性为列表的情况导致匹配失败
# 提取路网的边GeoDataFrame
edges_gdf = ox.graph_to_gdfs(gdf, nodes=False)
# 统一highway属性格式:如果是列表则取第一个值
edges_gdf["highway"] = edges_gdf["highway"].apply(lambda x: x[0] if isinstance(x, list) else x)
  1. 生成与边顺序完全匹配的颜色列表
# 按映射匹配颜色,未匹配到的道路类型统一设置为浅灰色
edges_gdf["edge_color"] = edges_gdf["highway"].map(road_color_map).fillna("#d9d9d9")
roadColors = edges_gdf["edge_color"].tolist()
  1. 调用plot_graph时传入生成的roadColors参数即可,和你现有代码逻辑一致
fig, ax = ox.plot_graph(gdf, node_size=0, bbox = (north, south, east, west),figsize=(height, width),
                    dpi = 96,bgcolor = bgcolor,
                    save = False, edge_color=roadColors,
                    edge_linewidth=roadWidths, edge_alpha=1)

get_edge_colors_by_attr函数作用说明

该函数适用于按数值类边属性生成渐变色配色的场景,比如按道路长度、限速等连续数值分配色阶,函数会自动根据属性值的分布计算对应颜色,返回的结果就是和边顺序匹配的颜色列表,可直接传入edge_color参数使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:36:00