Сетевая анимация со статическими узлами в python или даже webgl

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

Проблема в том, что я знаю что-то вроде networkx, перерисовка сети на каждом временном шаге не будет работать. Многие из распространенных алгоритмов отображения сети случайным образом размещают узлы таким образом, чтобы максимально увеличить расстояние между ними и лучше показать края. Поэтому, если бы мне пришлось перерисовывать сеть на каждом временном шаге, узлы каждый раз оказывались бы в разных местах, и было бы трудно определить схему роста сети. Вот почему мне нужен набор статических узлов, чтобы я мог видеть, как края добавляются на каждом временном шаге.

Я хочу визуализировать около 100 узлов одновременно. Поэтому я начну с небольшого количества узлов, например, около 20, и постепенно построю до 100 узлов. После проверки модели я бы собрал до 1000 или 2000 узлов. Конечно, сложно визуализировать сеть из 1000 или 2000 узлов, поэтому я просто хочу убедиться, что смогу визуализировать сеть, когда в симуляции просто 100 узлов.

Я не был уверен, смогу ли я сделать это в webgl или что-то еще, или есть хороший способ сделать это в python. Я могу использовать Vispy для связи между python и webgl, если это необходимо.

1 ответ

Решение

Это выглядит как хороший пример использования Vispy. Вам нужно будет использовать PointVisual для узлов и LineVisual для ребер. Затем вы можете обновить края в режиме реального времени по мере выполнения моделирования.

Анимация также будет работать в блокноте IPython с WebGL.

Обратите внимание, что другие графические наборы инструментов также могут работать для вас (хотя у вас не обязательно будет ускорение графического процессора через OpenGL), если вы укажете статические позиции для узлов. Я думаю, что вы можете исправить положение узлов с помощью d3js или networkx вместо того, чтобы полагаться на алгоритм автоматической разметки.

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