Как я могу заставить Networkx показывать оба веса на ребре, которое идет в 2 направлениях? - PullRequest
1 голос
/ 02 апреля 2020

У меня есть текстовый файл со следующими данными:

192.168.12.22 192.168.12.21 23
192.168.12.21 192.168.12.22 26
192.168.12.23 192.168.12.22 56

Есть три узла, и два из них отправляют пакеты друг другу. Я хочу иметь возможность отображать оба веса на двух разных ребрах, но он показывает только один с одним весом.

Это мой код:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.read_weighted_edgelist('test.txt', create_using=nx.DiGraph())
pos = nx.spring_layout(G)

print(nx.info(G))

nx.draw(G, pos, with_labels=True)    
nx.draw_networkx_edge_labels(G, pos)
plt.show()

Output

1 Ответ

1 голос
/ 02 апреля 2020

Вы можете использовать параметр label_pos (см. draw_networkx_edge_labels):

import networkx as nx
import matplotlib.pyplot as plt

edges = [["192.168.12.22", "192.168.12.21", 23],
         ["192.168.12.21", "192.168.12.22", 26],
         ["192.168.12.23", "192.168.12.22", 56]]

graph = nx.DiGraph()
graph.add_weighted_edges_from(edges)

pos = nx.spring_layout(graph)

nx.draw(graph, pos, with_labels=True)
nx.draw_networkx_edge_labels(graph,
                             pos,
                             edge_labels={(u, v): d for u, v, d in graph.edges(data="weight")},
                             label_pos=.66)
plt.show()

Вы также можете взглянуть на этот ответ,

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