Как сделать оба ребра (1 ребро, начинающееся с узла, и 2-е ребро, заканчивающееся в этом узле) с двумя узлами в ориентирPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как сделать оба ребра (1 ребро, начинающееся с узла, и 2-е ребро, заканчивающееся в этом узле) с двумя узлами в ориентир

Сообщение Anonymous »

У меня есть матрица расстояний из 50 городов.
Пример матрицы первых 10 городов выглядит примерно так:




0
< th>1
2
3
4
5
6
7
8
9




0
0
Инф.
1033,836
2954,445
Инф.
570,7902
Инф.
5201.642
927.6648
Инф


1
Инф0
846,4284
2988,993
1739,0
586,6539
556,8027
4718,087
992,3883
Информация


2
1065,751
Инф
0
3713,848
2328,803
1293,154
922,5469
5968,72
1660,567
917,3977

3
3093.118
2721.323
3738,992
0
1386,044
2593,299
2926,249
2167,597
2188,789
2756,88


41547,838
1609,13
2530,782
1509.116
0
1071.186
Инф.
3437,752
624,6915
1348,369


5
541,9545
603,57131270,946
2354,782
1026,145
0
204,1122
4501,91
436,0267
401,6861


6
459,8273
581,1262
1058,695
2634,319
1264.167
Инф.
0
Инф.
717,3868
300,6823

7
4815,335
5330,784
5322,427
2153,888
3612,119
4600,471
5372,185
0
3998,066
5173,963


8789.3162
901.9897
1795.072
2139,049
635,1849
434,8522
738,8418
4598.177
0
775.1959


9
794.9219244.2613
Инф.
2964.827
1463,854
388,5041
297,126
5215,893
845.9431
0



В матрице, где города не соединены, есть «inf», а в диагоналях 0. Я хочу визуализировать путь (скажем) из города 3 в город 4, а также из города 4 в город 3.
Я хочу визуализировать эту матрицу, используя networkx в Python. Я не получаю правильный результат, как я ожидал. Что касается этого вопроса: (как рисовать направленные графы с использованием networkx в Python?) и ответа, данного raz, мне удалось получить следующий график с визуализацией «направленного и стрелочного» типа:
Визуализация асимметричного расстояния матрицу, используя следующий код:

Код: Выделить всё

G = nx.DiGraph(directed=True)

num_nodes = 10 #considering only first 10 cities

for i in range(num_nodes):
for j in range(num_nodes):
if (distance_matrix[i][j] != 0) and (distance_matrix[i][j] != np.inf):
G.add_edge(i, j, weight=distance_matrix[i][j])

pos = nx.random_layout(G, seed=6)
edge_labels = {key: round(value, 3) for key, value in nx.get_edge_attributes(G, "weight").items()} #Doing this just to control the prescision of the distances

options = {
'node_color': 'lightblue',
'node_size': 100,
'width': 1,
'arrowstyle': '-|>',
'arrowsize': 12,
}

plt.figure(figsize=(10, 10))
nx.draw_networkx(G, pos, arrows=True, **options)
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_size=5)
plt.title("Distance Matrix Visualized as Graph")
plt.show()
Я получаю такую ​​визуализацию. Визуализация асимметричной матрицы расстояний.
Здесь показаны только односторонние края. Я хочу, чтобы отображались оба боковых края (очевидно, с разными значениями).
Например: край от города 3 до города 4 имеет 1386,0443, а от города 4 до города 3 имеет Расстояние 1509,1162. Но на графике отображается только 1509,1162
Следующий код

Код: Выделить всё

print(G[4][3]['weight'])
print(G[3][4]['weight'])
доходность:

Код: Выделить всё

1509.11627820888
1386.044382692059
т. е. на графике есть информация о ребрах в обоих направлениях, но по-прежнему отображается только одностороннее ребро.
Мне нужна помощь, чтобы правильно рисование обоих ребер (т. е. одного ребра, начинающегося из города, а другого, заканчивающегося в этом городе) между любыми двумя городами в ориентированном асимметричном графе.

Подробнее здесь: https://stackoverflow.com/questions/793 ... in-that-no
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»