有没有办法将networkx'draw'结果保存到文件或变量而不是显示它?

use*_*117 4 networkx

我想生成一个图形图,但将其保存到文件而不是将其显示到屏幕.有没有办法做到这一点?

小智 7

是! Networkx将绘制到matplotlib图,然后您可以使用所有matplotlibs API,包括保存文件(选择格式和dpi).

import networkx as nx
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
g = nx.Graph()
g.add_edge(1,2)
f = plt.figure()
nx.draw(g, ax=f.add_subplot(111))
f.savefig("graph.png")
Run Code Online (Sandbox Code Playgroud)

该行matplotlib.use("Agg")是可选的,但它适用于从不想以交互方式显示matplotlib图的程序.


Emi*_*ien 1

这是您正在寻找的文档,其中包含许多解决方案。我可以补充一点,如果没有人应该读取或修改创建的文件(它只是一种存储格式),您可以使用 pickle。如果您需要更通用的格式,因为该图将在其他工具中使用,您可能更喜欢 graphML 或 Json。

例子:

>>> cube = nx.hypercube_graph(2)
>>> nx.write_gpickle(cube,"cube.gpickle")
>>> readCube = nx.read_gpickle("cube.gpickle")
>>> cube.edge
{(0, 1): {(0, 0): {}, (1, 1): {}}, (1, 0): {(0, 0): {}, (1, 1): {}}, (0, 0): {(0, 1): {}, (1, 0): {}}, (1, 1): {(0, 1): {}, (1, 0): {}}}
>>> readCube.edge
{(0, 1): {(0, 0): {}, (1, 1): {}}, (1, 0): {(0, 0): {}, (1, 1): {}}, (0, 0): {(0, 1): {}, (1, 0): {}}, (1, 1): {(0, 1): {}, (1, 0): {}}}
Run Code Online (Sandbox Code Playgroud)

  • 我不确定这是否回答了OP的问题。据我了解,OP想要保存图表的图形,而不是图表的实际信息。@alabastericestalagtite 的答案可能是应该被接受的答案。 (5认同)