重复绘制同一张图——如何让节点处于同一位置?

Plotting the same graph repeatedly -- how to get nodes in the same position?

我在 Python 工作,使用 NetworkX 和 Matplotlib。

当我一遍又一遍地绘制相同的图形但颜色不同时,如何让节点每次都处于相同的位置?现在我得到:

但是我将节点添加为字典的键,将每个节点的颜色添加为值,然后对字典进行排序并将节点作为排序字典的键和颜色作为排序字典的值传递。相同的节点总是以相同的顺序添加。我认为那会起作用...

因此,x 包含节点(分支)列表:

for ct2,i in enumerate(x):
        for ct,j in enumerate(i):
            vertex =  j[t] 

            if np.angle(j[t]) <0 or np.angle(j[t]) >= np.angle(cutoff):
                C[vertex] = 0.0
            else:
                C[vertex] = .8- 3*(np.angle(j[t])/np.angle(cutoff))
    COLORS =  collections.OrderedDict(sorted(C.items())) 

然后绘图调用:

pos=nx.graphviz_layout(G,'dot')

nx.draw_networkx_nodes(
    G,pos,nodelist=COLORS.keys(),cmap=plt.get_cmap(cmap),
    node_size=nodesize,alpha=.6,vmax=1,vmin=0, node_color = COLORS.values() 
)

我做错了什么?

最好看看图形调用相对于循环的位置(内部?外部?)

但看起来您在循环中得到了 pos=nx.graphviz_layout(G,'dot')。所以每次在循环中它都会重新计算 pos。这是告诉算法将节点放在哪里的变量。位置有点随机,所以每次调用都会将它们放在不同的位置(这在 spring_layout 时更明显)。

如果这是你所做的,请移动

pos=nx.graphviz_layout(G,'dot')

循环之前。这样就不会每次都重新生成了。