4

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

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

举个例子:

     80 
      |
     100
   /  |  \
 50  100  150

我需要结束:

          80 
       /      \    
      100      100
    /  |        |
  50  100      150

有没有办法在不重命名节点的情况下做到这一点???谢谢!

4

1 回答 1

3

您可以向节点添加值吗?一些重组可能是不可避免的。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()
于 2013-10-25T14:25:19.247 回答