首页 > 解决方案 > 在networkX MultiDiGraph(由OSMNX制作)中获取节点DISPLAY(像素)坐标

问题描述

我正在使用 osmnx 创建一个 graph_from_point。我想将该图保存为 PNG 图像,但创建了一个补充文件,在保存的 PNG 文件中为我提供了节点的 lat/lng 坐标以及它们的 PIXEL 坐标。

本教程:https ://matplotlib.org/users/transforms_tutorial.html建议应该能够“从您的数据转换到您的显示坐标系”(我知道有一个潜在的显示与保存 DPI 问题)这似乎是我需要的,但如果我尝试使用 transData,我会收到以下错误。

G = ox.graph_from_point(map_query, distance=map_distance, network_type=map_network_type, simplify=True)
list(G.nodes.data())
# {'y': 51.5025637, 'x': 0.1111431, 'osmid': 95944704}
print type(G.transData)
AttributeError: 'MultiDiGraph' object has no attribute 'transData' 

这是正确的方法,但我引用了错误的对象?或者这是无效的?我不确定networkx和matplotlib之间的关系。我的最终目标是:

{'y': 51.5025637, 'x': 0.1111431, 'osmid': 95944704, 'pixel' : (23, 467)}

像素是对通过以下方式创建的已保存文件的引用:

ox.plot_graph(G, save=True, file_format='png', filename='example', fig_height=my_fig_height, dpi=my_dpi)

标签: pythonmatplotlibnetworkxosmnx

解决方案


我不确定networkx和matplotlib之间的关系。

OSMnx/NetworkX 和 matplotlib 之间没有内在的关系。NetworkX MultiDiGraph 对象没有 matplotlib 轴属性,例如 transData。我建议阅读OSMnx 文档OSMnx 可以通过matplotlib绘制图形,并将图形和轴返回给您。然后,您可以按照您认为合适的方式操作和使用该轴。


推荐阅读