我正在使用Networkx中的有向图,我需要将其“拆分”为两个。该图表示重组三叉树,在构建之后,我需要对节点上的值进行一些计算。
我的问题是我正在处理一个应用程序,需要我检查一个节点并“拆分”树。我需要有重复的节点值,因为它们在图上的位置对我来说很重要,而不是节点本身的值。注意:重新命名节点(即将节点10更改为10a)是不可行的,因为我必须稍后用这些数字进行计算。
举个例子:
80
|
100
/ | \
50 100 150
我最终需要:
80
/ \
100 100
/ | |
50 100 150
有没有办法在不重命名节点的情况下执行此操作???谢谢!
答案 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()