我有一个从文本文件中提取的加权图G:
i j distance
1 2 6000
1 3 4000
2 1 6000
2 6 5000
....
我想在图G上绘制一条特定的路线(不是最短路径),即[1、2、6、7]从节点1开始,通过访问节点2和节点在节点7结束6.这是我尝试过的代码。但是由于Im也是python和networkx软件包的新特性,所以我无法获得Im寻找的结果。
G = nx.read_edgelist('Graph.txt', data=(('weight',float),))
r=[1,2,6,7]
edges=[]
route_edges=[(r[n], r[n+1]) for n in range (len(r)-1)]
G.add_nodes_from(r)
G.add_edges_from(route_edges)
edges.append(route_edges)
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos=pos)
nx.draw_networkx_labels(G, pos=pos)
nx.draw_networkx_edges(G,pos=pos,edgelist=edges)
我想绘制整个边缘并用不同的颜色定义的路径,并且我想向节点6添加不同的颜色 。
答案 0 :(得分:0)
要以不同的颜色突出显示特定路径,只需为路径边缘设置不同的颜色边缘颜色即可。因为您可以定义一个包含列表中成对的节点对的元组,并根据路径中是否包含路径来设置图形边缘的颜色或另一种颜色:
#graph defined with from_pandas_edgelist for simplicity
G = nx.from_pandas_edgelist(df.rename(columns={'distance':'weight'}), 'i', 'j', 'weight',
create_using=nx.DiGraph)
我添加了更多边缘,所以情节看起来更清晰了:
G.edges(data=True)
# OutEdgeDataView([(1, 2, {'weight': 6000}), (1, 4, {'weight': 3200}), (1, 3, {'weight': 4000}),
# (2, 3, {'weight': 1000}), (2, 6, {'weight': 5000}), (4, 8, {'weight': 4000}),
# (6, 7, {'weight': 3000})])
我们可以为边缘颜色定义一个字典,并为节点颜色定义一个列表:
path = [1, 2, 6, 7]
path_edges = set(zip(path[:-1], path[1:]))
# set edge colors
edge_colors = dict()
for edge in G.edges():
if edge in path_edges:
edge_colors[edge] = 'magenta'
continue
else:
edge_colors[edge] = 'lightblue'
nodes = G.nodes()
node_colors = ['orange' if i != 6 else 'lightgreen' for i in nodes]
我们可以用来将图形绘制为:
fig = plt.figure(figsize=(12,8))
pos = nx.spring_layout(G, scale=20)
nx.draw(G, pos,
nodelist=nodes,
node_color=node_colors,
edgelist=edge_colors.keys(),
edge_color=edge_colors.values(),
node_size=800,
width=4,alpha=0.6,
arrowsize=20,
with_labels=True)