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

OSMnx使用Folium绘制边中心性图:edge_color列表不显示问题咨询

解决OSMnx plot_graph_folium中edge_color列表不显示的问题

首先明确:ox.plot_graph_folium的edge_color参数完全支持传入颜色列表,你的颜色没显示大概率是细节没处理到位,下面是具体的排查和解决思路:

  • 确保颜色列表长度与边数严格匹配
    OSMnx的路网图默认是多重图(允许两个节点间有多条边),所以要确认你的颜色列表长度等于len(G.edges(keys=True)),而不是len(G.edges())(后者会忽略key,统计的是节点对数量,而非实际边数)。可以先打印这两个值对比:

    print(f"总边数(含key): {len(G.edges(keys=True))}")
    print(f"颜色列表长度: {len(ec)}")
    

    长度不匹配时,函数会默认 fallback 到单一颜色,导致你的自定义颜色失效。

  • 检查颜色格式的合法性
    颜色值必须是Folium能识别的格式:

    • 十六进制字符串:#ff0000(红色)
    • RGB/RGBA元组:(1, 0, 0) 或 (1, 0, 0, 0.5)(后者带透明度)
    • 官方命名颜色:'red'、'blue'等
      如果你的ec是从数值(比如边中心性)直接生成的,记得先通过matplotlib的colormap做映射,比如:
    import matplotlib.pyplot as plt
    # 假设edge_centrality是你的边中心性字典
    norm = plt.Normalize(vmin=min(edge_centrality.values()), vmax=max(edge_centrality.values()))
    cmap = plt.cm.plasma
    ec = [cmap(norm(edge_centrality[u, v, k])) for u, v, k in G.edges(keys=True)]
    
  • 升级OSMnx到最新稳定版
    旧版本的plot_graph_folium对颜色列表的支持可能存在bug,执行以下命令升级:

    pip install --upgrade osmnx
    
  • 小范围调试验证
    先拿一个极简的小图测试,比如:

    G = ox.graph_from_point((37.79, -122.41), dist=500, network_type='walk')
    # 手动生成对应长度的颜色列表
    ec = ['red'] * len(G.edges(keys=True))
    graph_map = ox.plot_graph_folium(G, edge_color=ec, edge_width=2)
    # 保存查看结果
    graph_map.save('test_map.html')
    

    如果这个测试能显示红色边,说明你的基础逻辑没问题,再逐步替换成自己的颜色列表排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:43:51