【问题标题】:How to fix the nodes position in networkx?如何修复networkx中的节点位置?
【发布时间】:2021-01-09 17:01:21
【问题描述】:

我最近开始在 python 中使用 Networkx。我有一个代码,它生成一个网络,并根据一些过程节点功能发生变化。例如颜色和状态。为了绘制图表,我使用以下函数

def draw_graph():
    colors = []
    for i in range (nCount):
        for j in range (i,nCount):
            if ifActive(i,j,timeStep) == 1 :
                
                    colors.append('r')
                  
                
            else :
                colors.append('g')
    color_map = []   
    nColor= nx.get_node_attributes(graph,'color')
    for nc in nColor:
        color_map.append(nColor[nc])   
    nx.draw(graph,pos=nx.spring_layout(graph), node_color = color_map, edge_color = colors,with_labels = True )

在一个for循环的主函数中,我调用了绘图函数,但是每次节点的位置都会改变。现在我想知道,有什么解决方案可以固定所有图纸中节点的位置吗?如果是,我该怎么做? 这是主要功能

draw_graph()
for time in range(1,timeStep+1):
         if graph.node[i]["status"] == 1:
                settime(time,i)
        plt.figure(figsize=[10, 10], dpi=50)
        draw_graph()

下图是输出示例。如果您根据标签考虑节点,则它们的位置不固定。

【问题讨论】:

  • NetworkX 有对象layouts 决定如何组织它,但我不知道你是否可以以某种方式使用它来保持布局。也许如果您获得所有职位,并在每次更新后将它们归还,那么您将获得所有职位。
  • 你知道如何获取节点的位置吗?
  • 在当前代码中,您使用nx.spring_layout(graph) 创建位置(请参阅pos=...),您可以将其分配给变量,然后使用此变量插入nx.spring_layout(graph) 以使用相同的值。

标签: python networkx


【解决方案1】:

正如@furas 在 cmets 中所述,为了始终获得相同的节点位置,您需要将其保留为变量,例如:

pos = nx.spring_layout(graph)

然后将您的图表绘制为:

def draw_graph(p):
    # any code here, as long as no further nodes are added.
    nx.draw(graph,pos=p)

那么你终于可以这样称呼它了:

pos = nx.spring_layout(graph)
draw_graph(pos)
# any code here, as long as no further nodes are added.
draw_graph(pos)
# each call will give the same positions.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 2016-02-08
    • 2012-12-03
    • 2017-10-09
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多