【问题标题】:port networkx graph to graphviz without pygraphviz在没有 pygraphviz 的情况下将 networkx 图移植到 graphviz
【发布时间】:2018-04-26 05:17:05
【问题描述】:

我在 Windows 机器上使用 Python 3 工作,尽管付出了很多努力,但仍然无法安装 pygraphviz。单独讨论。

我有 networkx 和 graphviz 模块...是否有在 networkx 中构建网络图并提取为不使用 pygraphviz 的 graphviz 格式进行显示的范例?

drawing.nx_agraph 和 nx_agraph 中的所有相关功能似乎都需要 pygraphviz,但我已经习惯使用 networkx 并且喜欢其中的功能。在 networkx 的文档中,它甚至说他们专注于图形对象的开发,而不是实际显示。

【问题讨论】:

    标签: networkx graphviz pygraphviz


    【解决方案1】:

    您可以使用 pydot (https://pypi.python.org/pypi/pydot) 作为 PyGraphviz 的纯 Python 替代品

    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;
    }
    

    【讨论】:

      【解决方案2】:

      我知道这是一个老问题,但我一直在寻找同样的东西:如何从 NetworkX 中的图表中获取点符号?

      (如果您只对答案感兴趣,请跳过这一段。我实际上想显示一个 NetworkX 多重图,但即使 NetworkX 是用于操作网络和图形的强大 python 库,它的选项也相当有限。来显示(渲染)图形和网络。NetworkX 使用 Matplotlib 提供可视化图形的基本功能,它没有可视化多图的选项。NetworkX 不用于可视化图形,所以在 NetworkX documentation 他们推荐使用一些图形可视化工具,CytoscapeGephiGraphviz。所有这些工具都有某种 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)时的差异:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-18
        • 2018-04-28
        相关资源
        最近更新 更多