有没有办法将networkx的'draw'结果保存到文件或变量而不是显示它?
问题的出现原因是用户想将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(原问题的提出者)的需求,即保存图形的信息而不是图形本身。
是的!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),解释了第一个参数的含义。