【问题标题】:Plotting the same graph repeatedly -- how to get nodes in the same position?重复绘制同一张图——如何让节点在同一个位置?
【发布时间】:2015-01-19 09:01:59
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • 嗨 Wapiti - 只是想检查一下我的回答是否解决了您的问题。谢谢

标签: python graph matplotlib graphviz networkx


【解决方案1】:

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

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

如果这是你所做的,那就移动

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

在循环之前。然后它不会每次都重新生成。

【讨论】:

  • 嗨乔尔,你的回答很有帮助。我今天没有时间深入研究。我认为真正的问题是,由于我要解决的问题,我正在以非常复杂的方式做事。不过,我认为您的答案是正确的,并且会在我确定后立即接受。
  • 终于有机会研究这个,你是对的。谢谢,乔尔!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 2013-10-03
相关资源
最近更新 更多