【问题标题】:Using networkX to output a tree structure使用networkX输出树形结构
【发布时间】:2018-07-01 00:33:33
【问题描述】:

我正在使用networkX生成树结构如下(我在关注answer of this question)。

import networkx as nx
import matplotlib.pyplot as plt
G = nx.DiGraph()

G.add_node("ROOT")
for i in range(5):
    G.add_node("Child_%i" % i)
    G.add_node("Grandchild_%i" % i)
    G.add_node("Greatgrandchild_%i" % i)

    G.add_edge("ROOT", "Child_%i" % i)
    G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
    G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)

# write dot file to use with graphviz
# run "dot -Tpng test.dot >test.png"
nx.write_dot(G,'test.dot')

# same layout using matplotlib with no labels
plt.title('draw_networkx')
pos=nx.graphviz_layout(G, prog='dot')
nx.draw(G, pos, with_labels=False, arrows=False)
plt.savefig('nx_test.png')

我想画一棵树,如下图。

但是,我收到一条错误消息,提示 AttributeError: module 'networkx' has no attribute 'write_dot'。我的 networkx 版本是 1.11(使用 conda)。我尝试了不同的hacks,但都没有奏效。

所以,我很想知道是否有另一种使用 networkx 绘制树结构的方法来获得类似于图中提到的输出。请告诉我。

【问题讨论】:

    标签: python networkx graphviz pygraphviz


    【解决方案1】:

    我认为这个问题在 networkx 2.x 上已经解决了,但在此之前你应该像这样显式导入函数。

    from networkx.drawing.nx_agraph import write_dot
    

    from networkx.drawing.nx_pydot import write_dot
    

    我希望这行得通。

    【讨论】:

      【解决方案2】:

      您可以使用pygraphviz 完全绘制有向图。

      需要首先遵循以下步骤,因为没有graphviz(截至目前),pygraphviz 不起作用。

      1. http://www.graphviz.org/Download_windows.php下载graphviz-2.38.msi并安装
      2. http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygraphviz 下载 2.7 或 3.4 pygraphviz 轮文件
      3. 导航到您下载滚轮文件的目录并运行您的平台特定滚轮 pip install pygraphviz‑1.3.1‑cp34‑none‑win32.whl
      4. dot.exe 添加到主机路径 例如在windows控制面板->系统->编辑环境变量->修改PATH

      之后dotpng 文件可以如下创建。

      工作代码

      import pygraphviz as pgv
      
      G=pgv.AGraph(directed=True)
      
      #Attributes can be added when adding nodes or edge
      G.add_node("ROOT", color='red')
      for i in range(5):
          G.add_node("Child_%i" % i, color='blue')
          G.add_node("Grandchild_%i" % i, color='blue')
          G.add_node("Greatgrandchild_%i" % i, color='blue')
      
          G.add_edge("ROOT", "Child_%i" % i, color='blue')
          G.add_edge("Child_%i" % i, "Grandchild_%i" % i, color='blue')
          G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i, color='blue')
      
      # write to a dot file
      G.write('test.dot')
      
      #create a png file
      G.layout(prog='dot') # use dot
      G.draw('file.png')
      

      PNG 文件

      【讨论】:

        猜你喜欢
        • 2015-01-09
        • 1970-01-01
        • 2013-05-23
        • 1970-01-01
        • 2021-04-04
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 1970-01-01
        相关资源
        最近更新 更多