Делаем сетевые графы интерактивными с помощью Python и Pyvis

Open in Colab

telegram

Библиотека pyvis предназначена для быстрой визуализации сетевых графиков с минимальным количеством кода на Python. Она разработана как обертка для популярной JavaScript библиотеки visJS, которую можно найти по ссылке.

Начало

Все сети должны быть созданы как экземпляры класса Network:

Добавить узлы в сеть

Здесь первым параметром метода add_node является идентификатор ID для Node. Он может быть строкой или числом. Аргумент label - это строка, которая будет явно прикреплена к узлу в окончательной визуализации. Если аргумент label не указан, то в качестве метки будет использоваться идентификатор узла.

Параметр ID должен быть уникальным.

Вы также можете добавить список узлов:

network.Network.add_nodes() добавляет в сеть несколько узлов из списка.

Свойства узла

Вызов add_node() поддерживает различные свойства узла, которые можно установить индивидуально. Все эти свойства можно найти здесь.

Для прямого перевода этих атрибутов на Python обратитесь к документации network.Network.add_node().

Не по вине pyvis, некоторые атрибуты в документации VisJS работают не так, как ожидалось, или вообще не работают. Pyvis может преобразовывать элементы JavaScript для VisJS, но после этого все зависит от VisJS!

Индексирование узла

Используйте метод get_node() для определения узла по его идентификатору:

Добавление списка узлов со свойствами

При использовании метода network.Network.add_nodes() могут быть переданы необязательные ключевые аргументы для добавления свойств этим узлам. Допустимые свойства в этом случае:

['size', 'value', 'title', 'x', 'y', 'label', 'color']

Пример:

Если навести курсор мыши на узел, то можно увидеть, что атрибут узла title отвечает за отображение данных при наведении курсора. Вы также можете добавить HTML код в строку title.

Атрибут color может быть простым HTML цветом, например красным или синим. При необходимости можно указать полную спецификацию rgba. В документации VisJS содержится более подробная информация.

Подробная документация по дополнительным аргументам для узлов находится в документации метода network.Network.add_node().

Ребра

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

Ребра также могут содержать атрибут weight:

Ребра можно настроить, а документацию по параметрам можно найти в документации метода network.Network.add_edge() или обратившись к исходной документации VisJS.

Интеграция с Networkx

Простой способ визуализировать и строить сети в pyvis - использовать Networkx и встроенный вспомогательный метод pyvis для перевода в граф networkx.

Обратите внимание, что свойства узла Networkx с теми же именами, что и pyvis (например, title), транслируются непосредственно в атрибуты узла pyvis с соответствующим именем.

Визуализация

Отображение графика достигается одним вызовом метода network.Network.show() после построения базовой сети. Интерактивная визуализация представлена в виде статического HTML файла.

Запуск метода toggle_physics() позволяет более гибко взаимодействовать с графами.

Пример: визуализация сети персонажей Игры престолов

Следующий блок кода является минимальным примером возможностей pyvis:

Атрибут title каждого узла отвечает за отображение данных при наведении курсора на узел.

Использование пользовательского интерфейса конфигурации для динамической настройки параметров сети

У вас также есть возможность снабдить визуализацию пользовательским интерфейсом, используемым для динамического изменения некоторых настроек, относящихся к вашей сети. Это может быть полезно для поиска наиболее оптимальных параметров графика и функции компоновки.

Вы можете скопировать / вставить вывод, полученный с помощью кнопки generate options в приведенном выше пользовательском интерфейсе, в network.Network.set_options(), чтобы завершить результаты экспериментов с настройками.

Оригинальная документация тут

telegram