我使用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绘制树结构的方法来获得类似于图中提到的输出。请告诉我。
答案 0 :(得分:1)
我认为这个问题已在networkx 2.x上解决,但在此之前你应该明确导入这样的函数。
from networkx.drawing.nx_agraph import write_dot
或
from networkx.drawing.nx_pydot import write_dot
我希望这有效。
答案 1 :(得分:1)
您可以使用pygraphviz
完全绘制有向图。
首先需要执行以下步骤,因为pygraphviz
在没有graphviz
的情况下无效(截至目前)。
pygraphviz
轮文件
pip install pygraphviz‑1.3.1‑cp34‑none‑win32.whl
dot.exe
添加到主机路径
例如在Windows控制面板 - >系统 - >编辑环境变量 - >修改路径之后可以创建dot
和png
文件,如下所示。
工作代码
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')