我知道这是一个老问题,但我一直在寻找同样的东西:如何从 NetworkX 中的图表中获取点符号?
(如果您只对答案感兴趣,请跳过这一段。我实际上想显示一个 NetworkX 多重图,但即使 NetworkX 是用于操作网络和图形的强大 python 库,它的选项也相当有限。来显示(渲染)图形和网络。NetworkX 使用 Matplotlib 提供可视化图形的基本功能,它没有可视化多图的选项。NetworkX 不用于可视化图形,所以在 NetworkX documentation 他们推荐使用一些图形可视化工具,Cytoscape、Gephi、Graphviz。所有这些工具都有某种 python 接口,但最好的(最简单易用的)是支持 DOT 语言的graphviz Graphviz drawing software 的一部分。在graphviz 中可视化图形非常简单方便,您可以使用一条短线,例如graph.view(),默认情况下会创建一个 PDF 文件并在系统的默认 PDF 查看器中打开它,但您也可以查看和创建图像文件,例如 SVG 和 PNG。因此,将 NetworkX 图转换为 graphviz 图是理想的,为此您需要将 NetworkX 图转换为 DOT 表示法,然后graphviz 可以读取。)
Aric 的解决方案很简单,可以打印出图形的 DOT 表示法,但这是一种 hack,而且在我的情况下,我需要将 DOT 表示法保存在字符串变量中,以便我可以使用它在 @ 中创建图形987654334@ 来自该 DOT 符号。
networkx.drawing.nx_pydot.write_dot(source) 是一个创建 DOT 格式并将其保存到路径(文件句柄)的函数。这个函数的代码是:
@open_file(1, mode='w')
def write_dot(G, path):
P = to_pydot(G)
path.write(P.to_string())
return
这给了我们答案:
from networkx import path_graph
from networkx.drawing.nx_pydot import to_pydot
G = path_graph(4)
dot = to_pydot(G).to_string()
print(dot)
函数to_pydot (source) 使用pydot 库创建pydot.Dot 对象,该对象具有to_string (source) 方法,以DOT 语言返回图形的字符串表示形式。
附:
到graphviz 中的render a DOT source code 你可以这样做:
from graphviz import Source
src = Source(dot) # dot is string containing DOT notation of graph
src.view()
附:
以下两张图片显示了使用Matplotlib(图像左侧)和graphviz(图像右侧)可视化图形networkx.margulis_gabber_galil_graph(3)时的差异: