python - 在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)
解决方案
我不确定networkx和matplotlib之间的关系。
OSMnx/NetworkX 和 matplotlib 之间没有内在的关系。NetworkX MultiDiGraph 对象没有 matplotlib 轴属性,例如 transData。我建议阅读OSMnx 文档。OSMnx 可以通过matplotlib绘制图形,并将图形和轴返回给您。然后,您可以按照您认为合适的方式操作和使用该轴。
推荐阅读
- python - 岛大小问题给出最大递归深度误差
- node.js - VS Code 调试器:如何附加到浏览器同步服务的 Chrome 选项卡?
- git - 分析存储库平均线龄
- javascript - 如何使 jQuery 中的函数持续更长时间?
- sql - 根据 3 个变量和语法错误计算天数
- javascript - Datalist - 如何在点击选项上启动功能?
- python - 用数组索引 numpy 数组
- javascript - 即使在异步操作期间值发生变化,如何使用回调之前定义的值?
- r - 如何删除某些行上的某些列的值
- python - CSV Python输出:为列表中的每个项目输出一次而不是一次不匹配的字段