Networkx Python,在同一图内定义路径(子图,并使用Plotly进行图绘制)

问题描述 投票:0回答:1

我有汽车,城市和路线。每个城市都是一个节点。每条路线都是汽车产生的路径。

[不同的汽车将具有不同的路径,有时可能会相交(这意味着不同的汽车在其路径中找到了相同的城市),有时没有。

我会用所有城市和所有不同的路径绘制一个图,并用图绘制。示例:

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,下一步是分析图形。

python graph plotly data-science networkx
1个回答
0
投票

您可以在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)

© www.soinside.com 2019 - 2024. All rights reserved.