问题:用 NetworkX 和 matplotlib画图时,想要保存为jpg
或 png
格式的图片,结果发现保存的图片上没有任何内容,只是一个白色的图像。
以下是我的源代码:
def visualization(graph, R, sml):
plt.figure(figsize=(15, 8))
g = graph.to_networkx(node_attrs='h', edge_attrs='') # 转换 dgl graph to networks
pos = nx.kamada_kawai_layout(g)
pos_higher = {}
for k, v in pos.items():
if (v[1] > 0):
pos_higher[k] = (v[0] - 0.04, v[1] + 0.04)
else:
pos_higher[k] = (v[0] - 0.04, v[1] - 0.04)
nodes = []
weights = []
for idx_atom in range(graph.nodes().shape[0]):
weight = float(R[idx_atom])
weights.append(weight)
nodes.append((idx_atom, {"weight": weight}))
g.add_nodes_from(nodes)
cmap = plt.cm.get_cmap('Greens')
nx.draw(g, with_labels=True, pos=pos, node_color=weights, cmap=cmap, node_size=800, font_color="black")
plt.show()
plt.savefig('./graphs/' + sml + ".png", format="PNG")
它与plt.show
有关方法。
在脚本中调用 plt.show()
,文件对象仍处于打开状态,并且 plt.savefig
写入方法无法完全从该流中读取。因此,解决方法为注释掉plt.show()这一行:
# plt.show()
plt.savefig('./graphs/' + sml + ".png", format="PNG")
或者
plt.show(block=False)
plt.savefig('./graphs/' + sml + ".png", format="PNG")
或者或者在显示之前保存
plt.savefig('./graphs/' + sml + ".png", format="PNG")
plt.show()