首页 > 解决方案 > 使用 matplotlib 在一个图上绘制两个独立的图,x 和 y 上的比例不同

问题描述

我希望将两个独立的图叠加在一个matplotlib图形上。

所以我从osmnx

import osmnx as ox
G = ox.graph_from_place('Piedmont, California, USA', network_type='drive')
fig, ax = ox.plot_graph(G)

然后我绘制networkx图表:

nx.draw(nx.generators.barabasi_albert_graph(10,3), ax = ax)

而且我希望一个很好地覆盖在另一个上,但是坐标完全不同。第一个是 lon,lat,第二个是从 networkx 随机生成的。

如何很好地缩放它们以使它们可见?

我尝试了 ax.twinx(),但它对我不起作用。

PS。对于网络,我不能nx.draw(G, ax = ax)为 osmnx 传递 ax,它仅从 plot 返回fig, ax = ox.plot(G)

标签: pythonmatplotlibnetworkxosmnx

解决方案


对于网络,我可以将 ax nx.draw(G, ax = ax) 传递给 osmnx 而不是,它仅从绘图返回 fig, ax = ox.plot(G)

请注意,在最新的OSMnx 中,您可以将 an 传递axplot_graph函数。这应该会在下周的新版本中发布,或者你可以同时使用 GitHub 的 master 分支。

关于缩放非空间图,我不相信networkx 可以让您在特定坐标处绘制节点或边。您必须手动完成所有操作。但是,对于您的具体问题,您需要首先标准化您的非空间图形坐标,然后将它们缩放到空间 OSMnx 图形坐标的范围。这个matlab示例展示了如何以及如何轻松地转换为 python。


推荐阅读