Networkx如何选择仅保存文件、仅显示图形或两者兼顾?
自定义控制NetworkX图形的显示与保存
你可以通过添加模式控制参数,把显示和保存的逻辑拆分开,轻松实现三种操作的切换。这里是改好的代码:
import networkx as nx import matplotlib.pyplot as plt def handle_graph(G, mode='both'): # 图形绘制核心逻辑 pos = nx.spring_layout(G) f1 = plt.figure(figsize=(18,10)) default_axes = plt.axes(frameon=True) nx.draw_networkx(G, node_size=600, alpha=0.8, ax=default_axes, pos=pos) edge_labels = nx.get_edge_attributes(G, "weight") nx.draw_networkx_edge_labels(G, pos=pos, edge_labels=edge_labels) # 根据选择的模式执行对应操作 if mode in ['save', 'both']: plt.savefig('graph.jpg') if mode in ['show', 'both']: plt.show() plt.close() # 清理图形资源,避免多图绘制时出现异常 # 调用示例: # 仅显示图形 # handle_graph(G, mode='show') # 仅保存图形 # handle_graph(G, mode='save') # 同时显示+保存(默认行为) # handle_graph(G)
关键细节说明
mode参数支持三个取值:'show'(仅显示)、'save'(仅保存)、'both'(同时执行),默认值为both,和你原有代码的行为一致- 务必把
plt.savefig()放在plt.show()之前执行——如果先调用plt.show(),matplotlib会清空当前图形缓存,后续保存会得到空白图片 - 末尾的
plt.close()用于关闭当前图形对象,避免后续绘图时出现内存占用过高或图形重叠的问题
内容的提问来源于stack exchange,提问作者Evan Camilleri
相关产品推荐
相关产品推荐

