Я хочу визуализировать все узлы и все существующие ребра.
В настоящее время узлы и ребра находятся в таблицах CSV, но их можно загрузить в файл dict или json.
Я реализовал код с помощью Python и получил красивое и четкое изображение графика:

Для этого я использовал следующий код:
Код: Выделить всё
from matplotlib import pyplot as plt
import networkx as nx
G = nx.MultiDiGraph([
('BAY_530', 'BAY_530_E'),
('BAY_530_E', 'BAY_530_W'),
('BAY_530_E', 'SSX_W'),
('BAY_530', 'INTR_530'),
('BAY_530_W', 'BAY_530'),
('INTR_530', 'BAY_530'),
('INTR_530', 'M_502_5'),
('M_502_1', 'M_502_2'),
('M_502_2', 'M_502_1'),
('M_502_2', 'M_502_3'),
('M_502_3', 'M_502_2'),
('M_502_3', 'M_502_4'),
('M_502_4', 'M_502_3'),
('M_502_4', 'M_502_5'),
('M_502_5', 'M_502_4'),
('M_502_5', 'SSX_S'),
('SSX_N', 'SSX_S'),
('SSX_N', 'SSX_W'),
('SSX_S', 'INTR_530'),
('SSX_S', 'SSX_N'),
('SSX_W', 'BAY_530_E'),
('SSX_W', 'SSX_N')
])
pos = nx.circular_layout(G)
#pos = nx.spring_layout(G, seed=3113794652)
names = {name: name for name in G.nodes}
options = {"edgecolors": "tab:gray", "node_size": 800, "alpha": 0.9}
nx.draw_networkx_nodes(G, pos, node_color='b', node_size=1500, alpha=1)
nx.draw_networkx_labels(G, pos, names, font_size=8, font_color='w')
ax = plt.gca()
for e in G.edges:
ax.annotate("",
xy=pos[e[1]], xycoords='data',
xytext=pos[e[0]], textcoords='data',
arrowprops=dict(arrowstyle="->", color="0",
shrinkA=10, shrinkB=10,
patchA=None, patchB=None,
connectionstyle="arc3,rad={}".format(0.3 * e[2])
)
)
plt.tight_layout()
plt.axis('off')
plt.show()
но если я увеличу количество узлов, станет сложно расположить эти узлы и ребра красиво. Поскольку они перекрывают друг друга, невозможно понять, что с чем связано.
[img]https://i. sstatic.net/y7O1s.png[/img]
Я также пытался использовать наведение курсора мыши, чтобы выбрать узел, а затем выделить края, входящие и выходящие из узла.
Я должен указать здесь это для лучшего понимания связь/отношение между двумя узлами, края должны быть отдельными для каждого соединения.
Я также пробовал использовать круговой макет, но тогда он становится слишком большим и не все соединения отображаются.
Я знаю, что есть библиотека D3 в JavaScript, которая может работать для меня, но я хотел бы реализовать ее в Python.
Существует ли лучший способ реализовать это в Python или лучшая библиотека, которая может справиться с большим количеством ребер и узлов? Мне также нужна поддержка динамических элементов, таких как нажатие или наведение курсора мыши, чтобы можно было реализовать выбор узлов, а затем выделение связанных узлов и ребер.
Подробнее здесь: https://stackoverflow.com/questions/769 ... ith-python