我正在使用Geoff Boeing创造的精彩OSMnx library。我正根据他的一个tutorials策划一个街道网络。一切都很完美。但是,我想绘制40多个图,使用不同的中心。因此,我想为每个地块添加一个带有每个地区和中心名称的标题。目前,它看起来像这样。
这就是我的代码。
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)
谢谢你们。
答案 0 :(得分:2)
默认情况下,OSMnx包的函数在返回plt.show()
和fig
句柄之前已经调用ax
,这意味着您无法再操纵Figure
和Axes
个实例(我的猜测是这样做是为了防止在创建后图形失真)。这是使用名为save_and_show()
的特殊函数完成的,该函数在内部调用。您可以通过将关键字show=False
和close=False
传递到相应的绘图函数来阻止显示图形(close=False
是必需的,因为默认情况下,未自动显示的数字在{{save_and_show()
内关闭1}})。使用这些关键字后,可以在函数调用后操作fig
和ax
,但现在必须显式调用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函数都接受show
和close
关键字。例如,plot_shape
没有。希望这会有所帮助。