OSMnx将标题添加到图形图

时间:2018-02-15 04:24:16

标签: matplotlib plot title networkx osmnx

我正在使用Geoff Boeing创造的精彩OSMnx library。我正根据他的一个tutorials策划一个街道网络。一切都很完美。但是,我想绘制40多个图,使用不同的中心。因此,我想为每个地块添加一个带有每个地区和中心名称的标题。目前,它看起来像这样。

Plotted OSMnx Street Network

这就是我的代码。

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)

谢谢你们。

1 个答案:

答案 0 :(得分:2)

默认情况下,OSMnx包的函数在返回plt.show()fig句柄之前已经调用ax,这意味着您无法再操纵FigureAxes个实例(我的猜测是这样做是为了防止在创建后图形失真)。这是使用名为save_and_show()的特殊函数完成的,该函数在内部调用。您可以通过将关键字show=Falseclose=False传递到相应的绘图函数来阻止显示图形(close=False是必需的,因为默认情况下,未自动显示的数字在{{save_and_show()内关闭1}})。使用这些关键字后,可以在函数调用后操作figax,但现在必须显式调用plt.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函数都接受showclose关键字。例如,plot_shape没有。希望这会有所帮助。