Упрощение меток узлов сети - PullRequest
0 голосов
/ 13 декабря 2018
%matplotlib inline
import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_node('abc@gmail.com')
nx.draw(G, with_labels=True)
plt.show()

Выходное значение равно

enter image description here

Что я хочу, это

enter image description here

У меня есть тысячи записей электронной почты от person@email.com к другому@email.com в файле csv, я использую G.add_node(email_address) и G.add_edge(from, to) для построения G. Я хочу сохранить весь адрес электронной почты вГрафик G, но отображать его в упрощенной строке.

1 Ответ

0 голосов
/ 13 декабря 2018

networkx имеет метод с именем relabel_nodes, который принимает граф (G), mapping (правила перемаркировки) и возвращает новый граф (new_G) сузлы перемаркированы.

Тем не менее, в вашем случае:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
G.add_node('abc@gmail.com')
mapping = {
   'abc@gmail.com': 'abc'
}
relabeled_G = nx.relabel_nodes(G,mapping)
nx.draw(relabeled_G, with_labels=True)
plt.show()

Таким образом, вы сохраняете G нетронутыми и имеете упрощенные метки.

Вы можете по желанию изменить метки на месте,без новой копии, в этом случае вы просто позвоните G = nx.relabel_nodes(G, mapping, copy=False)

Если вы не знаете адресов электронной почты заранее, вы можете передать relabel_nodes функцию, например:

G = nx.relabel_nodes(G, lambda email: email.split("@")[0], copy=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...