Python Networkx:向树/图表添加重复或相等的节点?

时间:2013-10-25 07:18:57

标签: python graph networkx quantitative-finance

我正在使用Networkx中的有向图,我需要将其“拆分”为两个。该图表示重组三叉树,在构建之后,我需要对节点上的值进行一些计算。

我的问题是我正在处理一个应用程序,需要我检查一个节点并“拆分”树。我需要有重复的节点值,因为它们在图上的位置对我来说很重要,而不是节点本身的值。注意:重新命名节点(即将节点10更改为10a)是不可行的,因为我必须稍后用这些数字进行计算。

举个例子:

     80 
      |
     100
   /  |  \
 50  100  150

我最终需要:

          80 
       /      \    
      100      100
    /  |        |
  50  100      150

有没有办法在不重命名节点的情况下执行此操作???谢谢!

1 个答案:

答案 0 :(得分:2)

您可以只为节点添加值吗?一些重组可能是不可避免的。 value可以是任何内容,以便您可以保留已有的节点并区分它们......

import matplotlib.pyplot as plt
import networkx as nx

G=nx.DiGraph()
G.add_node(1,value=80)
G.add_node(2,value=100)
G.add_node(3,value=50)
G.add_node(4,value=100)
G.add_node(5,value=150)
G.add_node(6,value=100)
G.add_node(7)
G.add_node(8)
G.add_edges_from([(1,2),(2,3),(2,4),(1,6),(6,5)])

# change the value of nodes
for i in G:
    if 'value' in G.node[i]:
        # do something?
        continue
    else:
        G.node[i]['value']=200


labels={}
for i in G:
    labels[i]=G.node[i]['value']
pos=nx.circular_layout(G)

nx.draw_circular(G,node_size=1000,node_color='r',node_shape='s',with_labels=False)
nx.draw_networkx_labels(G,pos,labels,font_size=12)
plt.show()