Создание ориентированного, взвешенного сетевого графа из взвешенного края - PullRequest
2 голосов
/ 30 апреля 2020

У меня есть следующий список ребер, который хранится в edgelist.txt:

soldier1, soldier2, 3
soldier1, soldier3, 1
soldier1, soldier4, 2
soldier2, soldier1, 2
soldier2, soldier3, 1
soldier2, soldier4, 3
soldier3, soldier1, 3
soldier3, soldier2, 2
soldier3, soldier4, 1
soldier4, soldier1, 2
soldier4, soldier2, 1
soldier4, soldier3, 3

Чтобы нарисовать график, я использую следующий код:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.read_weighted_edgelist(path='edgelist.txt', delimiter=',', create_using=nx.DiGraph())
nx.draw_networkx(G, with_labels=True, arrowsize=5, pos=nx.spring_layout(G))
limits=plt.axis('off')
plt.show()

Однако, это создает график с удвоенным количеством узлов (их должно быть только 4, но создает график с 8). Это видно при просмотре графика графика: Network Graph

Вот информация о графике:

Name: 
Type: DiGraph
Number of nodes: 8
Number of edges: 12
Average in degree:   1.5000
Average out degree:   1.5000

Количество ребер правильное, но количество узлов двойное. Как мне это исправить?

1 Ответ

3 голосов
/ 30 апреля 2020

Поскольку вы задаете , в качестве разделителя, символ пробела считается частью имени.
Таким образом, вы получите два узла ' soldierN' и 'soldierN' для каждого узла.

Вы можете изменить разделитель, чтобы он учитывал также пробелы, то есть от ',' до ', '

>>> G = nx.read_weighted_edgelist(path='edgelist.txt', delimiter=', ', create_using=nx.DiGraph())
>>> G.nodes()
['soldier1', 'soldier2', 'soldier3', 'soldier4']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...