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
相关产品推荐
相关产品推荐

