port networkx graph to graphviz without pygraphviz
我正在Windows机器上使用Python 3进行工作,尽管付出了很多努力,但仍无法安装pygraphviz。 单独讨论。
我有networkx和graphviz模块...是否存在用于在networkx中构建网络图并将其提取为graphviz格式以供不使用pygraphviz显示的范例?
似乎drawing.nx_agraph和nx_agraph中的所有相关功能都需要pygraphviz,但我已经习惯于使用networkx并喜欢其中的功能。 在networkx的文档中,它甚至说他们专注于图形对象的开发,而不是实际的显示。
我知道这是一个古老的问题,但我一直在寻找同一件事:如何从NetworkX中的图形获取点符号?
(如果您仅对答案感兴趣,请跳过此段。我实际上想显示一个NetworkX多重图形,但是即使NetworkX是用于处理网络和图形的强大python库,但在显示(渲染)时它的选择也相当有限。图和网络。NetworkX使用Matplotlib提供可视化图的基本功能,而没有可视化多图的选项NetworkX不用于可视化图,因此在NetworkX文档中,他们建议使用某些图可视化工具,例如Cytoscape,Gephi, Graphviz。所有这些工具都有某种python接口,但最好的(最简单易用)是Graphviz,它支持Graphviz绘图软件的DOT语言,在graphviz中可视化图形非常简单方便,您可以使用一个短线,例如
Aric的解决方案很简单,可用于打印图形的DOT表示法,但是有点麻烦,在我的情况下,我需要将DOT表示法保存在字符串变量中,以便可以使用它从该DOT在graphviz中创建图形符号。
1 2 3 4 5 | @open_file(1, mode='w') def write_dot(G, path): P = to_pydot(G) path.write(P.to_string()) return |
这为我们提供了答案的解决方案:
1 2 3 4 5 6 | 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) |
函数
附言:
要在graphviz中渲染DOT源代码,您可以执行以下操作:
1 2 3 | from graphviz import Source src = Source(dot) # dot is string containing DOT notation of graph src.view() |
P.P.S .:
当使用Matplotlib(图像的左侧)和graphviz(图像的右侧)来可视化图形
您可以将pydot(https://pypi.python.org/pypi/pydot)用作PyGraphviz的纯Python替代品
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | In [1]: import networkx In [2]: import sys In [3]: G = networkx.path_graph(4) In [4]: networkx.drawing.nx_pydot.write_dot(G,sys.stdout) strict graph { 0; 1; 2; 3; 0 -- 1; 1 -- 2; 2 -- 3; } |