简体   繁体   中英

How to fix the nodes position in networkx?

I have recently started to work with Networkx in python. I have a code which generates a network and based on some processes the nodes features changes. for example the colours and the statuses. for drawing the graph I use the following function

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 )

and in the main function in a for loop, I call the drawing function, but every time the position of nodes changes. Now I want to know, is there any solution to fix the position of nodes in all drawings? If yes, how I can do it? this is the main function

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

the following figure is an example of output. IF you consider the nodes based on their labels, the position of them is not fix. 在此处输入图像描述

As @furas stated in the comments, in order to always obtain the same node positions you need to keep this as a variable, eg:

pos = nx.spring_layout(graph)

and then draw your graph as:

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

Then you can finally call it as:

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM