有没有一种方法可以将networkx的'draw'结果保存到文件或变量中而不是显示它?

16

我想生成一个图形,并将其保存到文件中而不是显示在屏幕上。有没有办法可以做到这一点?

2个回答

28

是的!networkx可以绘制到matplotlib图形中,之后您可以使用所有的matplotlib API,包括保存文件(以所选格式和dpi)。

import networkx
import matplotlib
import matplotlib.pyplot

g = networkx.Graph()
g.add_edge(1,2)
fig = matplotlib.pyplot.figure()
networkx.draw(g, ax=fig.add_subplot())
if True: 
    # Save plot to file
    matplotlib.use("Agg") 
    fig.savefig("graph.png")
else:
    # Display interactive viewer
    matplotlib.pyplot.show()

说明:

  1. matplotlib.use("Agg") 是可选的。它适用于从不想显示交互式查看器的程序。
  2. f.add_subplot() 所有参数都是可选的:

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): {}}}

5
我不确定这是否回答了楼主的问题。据我理解,楼主想要保存图表的形式,而不是实际的图表信息。@alabastericestalagtite 的回答可能是应该被接受的。 - Guillem Cucurull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接