Я пытаюсь построить график известной проблемы Кенигсбергских мостов, используя NetworkX и Python 3.8.
Этот код я использую:
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
G=nx.Graph()
G.add_node(1) ## Land A
G.add_node(2) ## Land B
G.add_node(3) ## Land C
G.add_node(4) ## Land D
## Connected Edges
G.add_edge(1,3,color='r',weight=1) ## Bridge 1
G.add_edge(1,3,color='r',weight=1) ## Bridge 2
G.add_edge(1,4,color='r',weight=1) ## Bridge 3
G.add_edge(3,4,color='r',weight=1) ## Bridge 4
G.add_edge(1,2,color='r',weight=1) ## Bridge 5
G.add_edge(1,2,color='r',weight=1) ## Bridge 6
G.add_edge(2,4,color='r',weight=1) ## Bridge 7
colors = nx.get_edge_attributes(G,'color').values()
weights = nx.get_edge_attributes(G,'weight').values()
names = {1:"Land A",2:"Land B",3:"Land C",4:"Land D"}
H=nx.relabel_nodes(G,names)
pos = nx.circular_layout(H)
nx.draw_networkx(H,pos,edge_color=colors,width=list(weights))
plt.savefig("konigsberg_bridges_graph.png")
plt.show()
и сгенерированный график таков:
Проблема в том, что это сильно отличается от графиков, которые появляются в Интернете:
Как я могу сделать график, подобный этому, с помощью NetworkX?
MultiGraph
, а не объектGraph
. Это работает с точки зрения моделирования, но, к сожалению, простая заменаnx.Graph
наnx.MultiGraph
не приводит к лучшему графику (хотя приводит к лучшей структуре данных). Алгоритмы построения NetworkX, кажется, сворачивают параллельные ребра в отдельные ребра. См. этот вопрос для получения дополнительной информации. - person John Coleman   schedule 26.06.2020