我有汽车,城市和路线。每个城市都是一个节点。每条路线都是汽车产生的路径。
[不同的汽车将具有不同的路径,有时可能会相交(这意味着不同的汽车在其路径中找到了相同的城市),有时没有。
我会用所有城市和所有不同的路径绘制一个图,并用图绘制。示例:
List of cities: CityA -CityB -CityD -CityZ -CityK
List of cars: Car1, Car2
Routes:
Car1 will have a path through cityA - cityB - cityD this path will be colored in red
Car2 will have a path though cityZ - cityA - cityK this path will be colored in blue
使用networkx.classes.function.add_path我无法实现这一点,因为我将不保留有关不同汽车的信息,只有连接节点的列表:
As in the previous example add_path, G.edges(): [(CityA-CityB),(CityB-CityD),(CityZ-CityA),(CityA-CityK)]
我不确定用networkx是否可以实现我想要的东西。
一种绘图解决方案只是将列表传递给绘图,但是这样做我什至不使用NetworkX,下一步是分析图形。
您可以在NetworkX中设置节点和边属性,然后可以使用它来自定义绘图的某些方面。在这种情况下,可以将颜色属性设置为图形的边缘,然后使用该属性在edge_color
中设置nx.draw
。您可以使用共享的示例路径来执行此操作:
nx.draw
现在创建一个有向图,遍历路径列表,并分配颜色以将它们添加为边,以及相应的属性:
import networkx as nx
from matplotlib import pyplot as plt
path_car1 = ['cityA','cityB','cityD']
path_car2 = ['cityZ','cityA','cityK']
paths = [path_car1, path_car2]
colors = ['Red','Blue']
您可以使用以下方法获得所有边缘的给定属性的值:
G = nx.DiGraph()
for path, color in zip(paths, colors):
for edge in zip(path[:-1], path[1:]):
G.add_edge(*edge, color=color)
现在绘制时,您可以通过edge_colors = nx.get_edge_attributes(G, 'color')
参数设置边缘颜色:
edge_color
plt.figure(figsize=(10,7))
pos = nx.spring_layout(G, scale=20)
nx.draw(G, pos, node_color='lightgreen',
with_labels=True, node_size=2000,
edgelist=G.edges(),
edge_color=edge_colors.values(),
arrowsize=30,
width=6,alpha=0.9)