一、问题描述:
做课程设计时,需要动态输出dijkstra最短路径查找过程,过程中需要节点和边颜色的动态变化来显示寻找最短路径的过程。在编写使其中某条边改变颜色的时候,出现了这个报错TypeError: cannot unpack non-iterable int object。按照源代码编写了一个测试代码如下:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.DiGraph()
G.add_edge(1,2)
G.add_edge(4,3)
G.add_edge(1,4)
colors_node=['']*4 #节点颜色
colors_edge=['']*3 #边的颜色
pos=nx.spring_layout(G)
#初始化边的颜色
for i in range(0,3):
colors_edge[i]='r'
nx.draw(G,pos=pos,with_labels=True,edge_color=colors_edge)
plt.show()
print(G.edges())
a=G.edges()
print(a[0])
程序输出:
可以看出G.edges()是[()]这种格式的,类似于列表里面存放的元组,但是下面的不能用索引输出指定值。
经过强制类型转换后便可输出索引,来更改指定边的颜色(按照我的思路,如果想更改某条具体边的颜色,就需要确定这条边在G中的索引,进一步确定更改colors中的哪个元素的值。之前查到过一种直接给边附上颜色的方法,但是不知道为什么我这里报错,所以自己想了这个方法)。
更改之后的代码如下:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.DiGraph()
G.add_edge(1,2)
G.add_edge(4,3)
G.add_edge(1,4)
colors_node=['']*4 #节点颜色
colors_edge=['']*3 #边的颜色
pos=nx.spring_layout(G)
#初始化节点和边的颜色
for i in range(0,4):
colors_node[i]='y'
for i in range(0,3):
colors_edge[i]='r'
nx.draw(G,pos=pos,with_labels=True,node_color=colors_node,edge_color=colors_edge)
plt.show()
#把G.edge()输出的结果转化为list类型,不然无法实现索引(a[0])
a=list(G.edges())
print(a[0])