我正在使用 Networkx 中的有向图,我需要将其“拆分”为两部分。该图表示一个重组三叉树,在构建它之后我需要对节点上的值进行一些计算。
我的问题是我正在处理一个应用程序,它要求我检查一个节点并“拆分”树。我需要有重复的节点值,因为它们在图表上的位置对我来说很重要,而不是节点本身的值。注意:重新命名节点(即将节点 10 更改为 10a)是不可行的,因为稍后我必须对这些数字进行计算。
举个例子:
80
|
100
/ | \
50 100 150
最后我需要:
80
/ \
100 100
/ | |
50 100 150
有没有办法在不重命名节点的情况下做到这一点???谢谢!
最佳答案
您能为节点添加值吗?一定程度的重组可能是不可避免的。 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()
关于Python 网络 x : Add duplicate or equal nodes to a tree/graph?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19583505/