如果我用networkx制作一棵树并绘制它,节点会重叠。有没有办法绘制它,使其没有重叠?
import matplotlib.pyplot as plt import networkx as nx T = nx.generators.balanced_tree(2, 5) nx.draw(T) plt.show()
flvlnr441#
我不是这方面的Maven,但这里的代码使用了pydot库和它的graph_viz依赖项。这些库是Anaconda Python自带的,但默认情况下不会安装,所以首先在命令提示符下执行以下操作:
pydot
graph_viz
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",并且如果您使结果窗口更宽,则会得到
"twopi"
"dot"
此外,如果使用字符串"circo"并使窗口变宽,则会得到
"circo"
a8jjtwal2#
如果你想在没有额外的库的情况下完成这个任务,看看这个答案,它显示了一种在networkx中获得层次树布局或圆形布局的方法:https://stackoverflow.com/a/29597209/2966723我计划在不久的某个时候向networkx添加一个稍微修改过的版本。
pxiryf3j3#
使用pygraphviz AGraph(点)类。第一个nx.nx_pydot.graphviz_layout依赖于pydot软件包,该软件包存在已知问题,目前尚未得到积极维护。请考虑改用nx.nx_agraph.graphviz_layout。请参见https://github.com/networkx/networkx/issues/5723
3条答案
按热度按时间flvlnr441#
我不是这方面的Maven,但这里的代码使用了
pydot
库和它的graph_viz
依赖项。这些库是Anaconda Python自带的,但默认情况下不会安装,所以首先在命令提示符下执行以下操作:这是从循环树改编的代码。
如果调整窗口使其成为正方形,则结果为
或者,如果您更喜欢自顶向下的树,则可以将该代码中的字符串
"twopi"
替换为"dot"
,并且如果您使结果窗口更宽,则会得到此外,如果使用字符串
"circo"
并使窗口变宽,则会得到a8jjtwal2#
如果你想在没有额外的库的情况下完成这个任务,看看这个答案,它显示了一种在networkx中获得层次树布局或圆形布局的方法:
https://stackoverflow.com/a/29597209/2966723
我计划在不久的某个时候向networkx添加一个稍微修改过的版本。
pxiryf3j3#
使用pygraphviz AGraph(点)类。
第一个
nx.nx_pydot.graphviz_layout依赖于pydot软件包,该软件包存在已知问题,目前尚未得到积极维护。请考虑改用nx.nx_agraph.graphviz_layout。请参见https://github.com/networkx/networkx/issues/5723