【问题标题】:Draw nodes following a specific order on Networkx in Python?在 Python 中按照 Networkx 上的特定顺序绘制节点?
【发布时间】:2021-05-18 14:12:58
【问题描述】:

我问的问题没有找到任何答案,可能是因为我没有使用正确的词语来表达它,所以我会尝试问她希望有人可以帮助我,提前谢谢。 我正在尝试使用在 Debian 上运行的 NetworkX 库 2.5 版和 Python 3.9 绘制图形。 我的图包含一个节点“s”、一个节点“t”、多个节点 t_i、1

是否可以像下图那样绘制(当然包括边缘)?我没有找到一种方法来订购节点的显示方式...

非常感谢!

【问题讨论】:

    标签: python python-3.x networkx


    【解决方案1】:

    您可以使用multipartite_layout 进行您想要的定位。您需要在节点属性(参见下面的level)中指定节点应属于哪个组,然后在给定级别检索布局。添加边不会改变节点的位置,所以我没有将它们添加到以下最小示例中:

    import networkx as nx
    import matplotlib.pylab as pl
    
    G = nx.Graph()
    
    G.add_node("s", level=0)
    G.add_node("t_1", level=1)
    G.add_node("t_2", level=1)
    G.add_node("v_1", level=2)
    G.add_node("v_2", level=2)
    G.add_node("v_3", level=2)
    G.add_node("t", level=3)
    
    pos = nx.multipartite_layout(G, subset_key="level")
    
    nx.draw(G, pos, with_labels=True)
    pl.show()
    

    结果

    【讨论】:

    • 非常感谢,它完美地回答了我的问题。你知道是否有办法在第 i 层和第 i+1 层之间设置一定的距离?我在文档 (networkx.org/documentation/stable/auto_examples/drawing/…) 中给出的示例中找不到这个,即使尝试更改代码
    • 可以直接修改返回的内容(pos)。它只是一个以节点为键的字典和包含 x 和 y 位置的二维数组。但是,您可能只能更改图层之间的相对距离。否则,您需要修改图形大小(使用 matplotlib)。
    • 非常感谢!我检查了一下, pos 包含每个节点的键值(如果有 n+1 个节点,键是 0 到 n),其中 pos[node] = (x,y) ;节点的坐标。 x 值对于同一层中的节点是相等的,因此可能有一种方法可以更改此值而无需为每个节点编辑它。如果我找到更多信息,我会添加评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2011-04-28
    • 2015-10-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    相关资源
    最近更新 更多