0

我正在使用Geoff Boeing 创建的出色的OSMnx 库。我正在根据他的一个教程绘制街道网络。一切都很完美。但是,我想使用不同的中心度绘制 40 多个图表。因此,我想为每个地块添加一个带有每个区域和中心名称的标题。目前,它看起来像这样。

绘制的 OSMnx 街道网络

这就是我的代码的样子。

def display_most_important_node(G_centralities_sorted_dict, G_dictionary, district, centrality_measure='betweenness_centrality'):
    node_color = ['red' if node == G_centralities_sorted_dict[district][centrality_measure][0][0] else '#336699' for node in ox.project_graph(G_dictionary[district]).nodes()]
    node_size = [40 if node == G_centralities_sorted_dict[district][centrality_measure][0][0] else 20 for node in ox.project_graph(G_dictionary[district]).nodes()]

    fig, ax = ox.plot_graph(ox.project_graph(G_dictionary[district]), annotate=False, edge_linewidth=1.5, node_size=node_size, fig_height=10, node_color=node_color, node_zorder=2)

谢谢你们。

4

1 回答 1

3

默认情况下,OSMnx 包的函数在返回and句柄plt.show()之前就已经调用了,这意味着您不能再操作and实例(我的猜测是这样做是为了防止创建后图形失真)。这是使用一个名为 的特殊函数完成的,该函数在内部调用。您可以通过将关键字传递给相应的绘图函数来防止显示图形(需要,因为默认情况下未自动显示的图形在内部关闭)。使用了这些关键字,并且可以在函数调用之后进行操作,但是现在figaxFigureAxessave_and_show()show=Falseclose=Falseclose=Falsesave_and_show()figaxplt.show()必须显式调用。这里仍然是 OP 之后的完整示例:

def display_most_important_node(G_centralities_sorted_dict, G_dictionary, district, centrality_measure='betweenness_centrality'):
    node_color = ['red' if node == G_centralities_sorted_dict[district][centrality_measure][0][0] else '#336699' for node in ox.project_graph(G_dictionary[district]).nodes()]
    node_size = [40 if node == G_centralities_sorted_dict[district][centrality_measure][0][0] else 20 for node in ox.project_graph(G_dictionary[district]).nodes()]

    fig, ax = ox.plot_graph(ox.project_graph(G_dictionary[district]), annotate=False, edge_linewidth=1.5, node_size=node_size, fig_height=10, node_color=node_color, node_zorder=2, show=False, close=False)

    ax.set_title('subplot title')
    fig.suptitle('figure title')
    plt.show()

请注意,并非所有 OSMnx 函数都接受showandclose关键字。例如,plot_shape没有。希望这可以帮助。

于 2018-02-16T04:59:46.590 回答