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

13 浏览
0 Comments

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

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

0
0 Comments

问题的出现原因是用户想将networkx绘制的图形保存到文件或变量中,而不是直接显示出来。解决方法是使用networkx提供的不同的存储格式,如pickle、graphML或Json。用户可以根据自己的需求选择合适的格式进行保存。

以下是一个示例代码,展示了如何使用pickle格式保存图形,并通过读取pickle文件来获取保存的图形信息:

import networkx as nx
# 创建一个图形
cube = nx.hypercube_graph(2)
# 将图形保存为pickle文件
nx.write_gpickle(cube, "cube.gpickle")
# 从pickle文件中读取图形
readCube = nx.read_gpickle("cube.gpickle")
# 打印图形的边信息
print(cube.edge)
print(readCube.edge)

上述代码首先创建了一个2维立方体图形(cube),然后使用`nx.write_gpickle()`方法将图形保存为pickle文件(cube.gpickle),接着使用`nx.read_gpickle()`方法从pickle文件中读取图形,并将读取到的图形信息存储在readCube变量中。最后,打印了原始图形和读取到的图形的边信息。

需要注意的是,上述解决方法是基于理解OP(原问题的提出者)的需求,即保存图形的信息而不是图形本身。

0
0 Comments

是的!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: 
    # 保存绘图结果到文件
    matplotlib.use("Agg") 
    fig.savefig("graph.png")
else:
    # 显示交互式查看器
    matplotlib.pyplot.show()

解释说明:

1. `matplotlib.use("Agg")`是可选的。它适用于从不想显示交互式查看器的程序。

2. `f.add_subplot()`的所有参数都是可选的:

- 'what is the `fig.add_subplot(111)` argument' (stackoverflow.com):[链接](https://stackoverflow.com/questions/3584805)

- api文档:[matplotlib.pyplot.subplot()](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.subplot.html),解释了第一个参数的含义。

0