Как удалить последний край подграфа с помощью networkx - PullRequest
2 голосов
/ 05 марта 2020

Я надеялся, что вы поможете мне с этим. Я создал график, используя матрицу смежности со следующим кодом.

graph = nx.from_numpy_array(adjacency_matrix, create using = nx.DiGraph)
mypos = nx.spring_layout(graph)
nx.draw_networkx(graph, pos = mypos)

и тогда я получаю кратчайший путь ...

path = nx.shortest_path(graph, 3, 2)
print(path)

Что дает мне следующий путь

[3,1,2]

Я пытался нарисовать путь создание подграфа с использованием узлов, заданных кратчайшим путем.

subgraph = graph.subgraph(path)
nx.draw_networkx(H, pos = mypos, arrows = True)
nx.draw_networkx_nodes(H, pos = mypos, node_color = 'r')
nx.draw_networkx_edges(H, pos = mypos, edge_color = 'r')

И я получаю следующий результат

Figura

Проблема если, хотя это было рисование, они добавили новый дополнительный край между узлами 2 и 3, который я не хочу, есть ли способ изменить это, чтобы у меня не было этого дополнительного края? Я знаю, что networkx может удалить ребро с помощью nx.remove_edge (), но я не хочу удалять ребра вручную каждый раз, когда я запускаю программу и выбираю другой путь. Заранее спасибо

1 Ответ

1 голос
/ 05 марта 2020

Для вашей задачи вам не нужен подграф. Вы можете выделить путь и узел с помощью следующего кода, который является упрощением принятого ответа от Подсветка определенных узлов / ребер в NetworkX - Проблемы с использованием zip () .

import networkx as nx
import matplotlib.pylab as pl

# Set up graph
graph = nx.DiGraph(nx.karate_club_graph())

# Get position using spring layout
pos = nx.spring_layout(graph)

# Get shortest path
path = nx.shortest_path(graph, 0, 9)
# if you want to draw fewer edges, you can modify the following line by setting limits
path_edges = list(zip(path,path[1:]))

# Draw nodes and edges not included in path
nx.draw_networkx_nodes(graph, pos, node_color='k', nodelist=set(graph.nodes)-set(path))
nx.draw_networkx_edges(graph, pos, edgelist=set(graph.edges)-set(path_edges))

# Draw nodes and edges included in path
nx.draw_networkx_nodes(graph, pos, nodelist=path, node_color='r')
nx.draw_networkx_edges(graph,pos,edgelist=path_edges,edge_color='r')

pl.axis("off")
pl.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...