如何在Networkx中更精美地绘制树

Anu*_*ush 2 python matplotlib networkx

如果我使用networkx制作一棵树并将其绘制,则节点重叠。有没有办法画出来所以没有重叠?

import matplotlib.pyplot as plt
import networkx as nx
T = nx.generators.balanced_tree(2, 5)
nx.draw(T)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Joe*_*oel 15

如果您想在没有额外库的情况下执行此操作,请查看此答案,它展示了一种纯粹在 networkx 中获取分层树布局或圆形布局的方法:

/sf/answers/2071804661/

我计划很快将其稍微修改的版本添加到 networkx 中。

  • 嗯...“很快”还没有发生。 (3认同)

Ror*_*ton 5

我不是专家,但是这里是使用该pydot库及其graph_viz依赖项的代码。这些库是Anaconda Python随附的,但默认情况下未安装,因此请首先从命令提示符处执行以下操作:

conda install pydot
Run Code Online (Sandbox Code Playgroud)

然后是从循环树改编的代码。

import matplotlib.pyplot as plt
import networkx as nx
import pydot
from networkx.drawing.nx_pydot import graphviz_layout

T = nx.balanced_tree(2, 5)

pos = graphviz_layout(T, prog="twopi")
nx.draw(T, pos)
plt.show()
Run Code Online (Sandbox Code Playgroud)

如果将窗口调整为正方形,结果是

在此处输入图片说明

或者,如果您希望使用自上而下的树,则可以使用替换该"twopi"代码中的字符串"dot",并且如果使生成的窗口变宽,则会得到

在此处输入图片说明

另外,如果您使用字符串"circo"代替并扩大窗口范围,则会得到

在此处输入图片说明

  • 这很棒!谢谢。 (2认同)