【问题标题】:How to draw a tree more beautifully in networkx如何在networkx中更漂亮地画一棵树
【发布时间】:2019-12-22 00:59:58
【问题描述】:

如果我使用 networkx 创建树并绘制它,节点会重叠。有没有办法画出来不重叠?

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

【问题讨论】:

    标签: python matplotlib networkx


    【解决方案1】:

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

    conda install pydot
    

    那么这里是改编自Circular Tree的代码。

    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" 并使窗口变宽,你会得到

    【讨论】:

    • 这太棒了!谢谢。
    【解决方案2】:

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

    https://stackoverflow.com/a/29597209/2966723

    我计划在不久的某个时候将这个稍微修改的版本添加到 networkx。

    【讨论】:

    • 嗯...“很快”还没有发生。
    猜你喜欢
    • 2010-10-21
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多