Python 为NetworkX中的每个路径指定颜色

Python 为NetworkX中的每个路径指定颜色,python,graph,plotly,data-science,networkx,Python,Graph,Plotly,Data Science,Networkx,我有汽车、城市和路线。 每个城市都是一个节点。 每条路线都是由汽车生成的路径 不同的汽车会有不同的路径,有时路径可以相交(这意味着不同的汽车在他们的路径上找到了同一个城市),有时不会 我将呈现一张包含所有城市和所有不同路径的图表,并用plotly绘制该图表。 例如: 使用networkx.classes.function.add_path我无法实现这一点,因为我不会保留关于不同车辆的信息,只有已连接节点的列表: As in the previous example add_path, G.edg

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

不同的汽车会有不同的路径,有时路径可以相交(这意味着不同的汽车在他们的路径上找到了同一个城市),有时不会

我将呈现一张包含所有城市和所有不同路径的图表,并用plotly绘制该图表。 例如:

使用networkx.classes.function.add_path我无法实现这一点,因为我不会保留关于不同车辆的信息,只有已连接节点的列表:

As in the previous example add_path, G.edges(): [(CityA-CityB),(CityB-CityD),(CityZ-CityA),(CityA-CityK)]
我不确定我所寻找的东西是否可以通过networkx实现


plot的解决方案是将列表传递给plotly,但这样做我甚至不会使用NetworkX,接下来的步骤是分析图形。

您可以在NetworkX中设置节点和边属性,然后使用这些属性自定义绘图的某些方面。在这种情况下,可以为图形的边设置颜色属性,并使用此属性在中设置
edge\u颜色。以下是如何使用您共享的示例路径来实现这一点:

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\u color
参数设置边缘颜色:

plt.figure(figsize=(10,7))
pos = nx.spring_layout(G, scale=20)
nx.draw(G, pos, 
        node_color='black',
        with_labels=True, 
        node_size=1200,
        edgelist=G.edges(),
        edge_color=edge_colors.values(),
        arrowsize=15,
        font_color='white',
        width=3,
        alpha=0.9)

您可以在NetworkX中设置节点和边属性,然后可以使用这些属性自定义绘图的某些方面。在这种情况下,可以为图形的边设置颜色属性,并使用此属性在中设置
edge\u颜色。以下是如何使用您共享的示例路径来实现这一点:

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\u color
参数设置边缘颜色:

plt.figure(figsize=(10,7))
pos = nx.spring_layout(G, scale=20)
nx.draw(G, pos, 
        node_color='black',
        with_labels=True, 
        node_size=1200,
        edgelist=G.edges(),
        edge_color=edge_colors.values(),
        arrowsize=15,
        font_color='white',
        width=3,
        alpha=0.9)

如果我是对的,NetworkX中的所有信息都保存在节点/边中,而不是图形中?我认为可以保存路径列表(列表列表),然后Graph类对其进行详细说明,但您的解决方案完全改变了我对NetworkX实际工作方式的看法是的,每个节点和边都可以分配一组属性@tway101,因此如果我是对的,NetworkX中的所有信息都保存在节点/边中,而不是图形中?我认为可以保存路径列表(列表列表),然后图形类对其进行详细阐述,但是你的解决方案彻底改变了我对NetworkX实际工作方式的看法是的,每个节点和边都可以分配一组属性@Tway101