python 如何在networkx中更漂亮地绘制一棵树

i34xakig  于 2022-10-30  发布在  Python
关注(0)|答案(3)|浏览(251)

如果我用networkx制作一棵树并绘制它,节点会重叠。有没有办法绘制它,使其没有重叠?

import matplotlib.pyplot as plt
import networkx as nx
T = nx.generators.balanced_tree(2, 5)
nx.draw(T)
plt.show()

flvlnr44

flvlnr441#

我不是这方面的Maven,但这里的代码使用了pydot库和它的graph_viz依赖项。这些库是Anaconda Python自带的,但默认情况下不会安装,所以首先在命令提示符下执行以下操作:

conda install pydot

这是从循环树改编的代码。

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()

如果调整窗口使其成为正方形,则结果为

或者,如果您更喜欢自顶向下的树,则可以将该代码中的字符串"twopi"替换为"dot",并且如果您使结果窗口更宽,则会得到

此外,如果使用字符串"circo"并使窗口变宽,则会得到

a8jjtwal

a8jjtwal2#

如果你想在没有额外的库的情况下完成这个任务,看看这个答案,它显示了一种在networkx中获得层次树布局或圆形布局的方法:
https://stackoverflow.com/a/29597209/2966723
我计划在不久的某个时候向networkx添加一个稍微修改过的版本。

pxiryf3j

pxiryf3j3#

使用pygraphviz AGraph(点)类。
第一个
nx.nx_pydot.graphviz_layout依赖于pydot软件包,该软件包存在已知问题,目前尚未得到积极维护。请考虑改用nx.nx_agraph.graphviz_layout。请参见https://github.com/networkx/networkx/issues/5723

相关问题