Как отобразить сеть с лучшим разделением с помощью пакета Networkx?

Я создал объект графа, используя pytextrank пакет вроде так:

import pytextrank
### ........................... 
### Some steps and calculations
### ...........................
graph, ranks = pytextrank.text_rank(path_stage1)

И я могу использовать networkx пакет, чтобы сделать networkx рисовать так:

import networkx as nx
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(50,50))
nx.draw(graph, with_labels=True) 

plt.show()

Но, как вы можете видеть, слова в основном сосредоточены вокруг центра. Я хотел бы видеть более высокое разделение между классами слов. Как я могу это сделать?

1 ответ

Решение

То, что вы ищете, - это другой макет (термин Networkx для алгоритмов позиционирования узлов, которые используются при рисовании графиков). По умолчанию, nx.draw() использует весенний макет. Изменить ваш макет можно следующим образом:

import networkx as nx
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(50,50))
pos = nx.spectral_layout(graph)
nx.draw(graph, pos=pos, with_labels=True) 

plt.show()

Вы можете поиграть с несколькими макетами, чтобы найти тот, который соответствует вашим потребностям.

Другой вариант - сохранить ваш график в файл и загрузить его с Gephi, который имеет приятный графический интерфейс для визуализации и исследования вашего графика. (Также поддерживается несколько алгоритмов компоновки графа).

Другие вопросы по тегам