Как отобразить сеть с лучшим разделением с помощью пакета 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, который имеет приятный графический интерфейс для визуализации и исследования вашего графика. (Также поддерживается несколько алгоритмов компоновки графа).