Есть ли интерактивная графическая библиотека для python - PullRequest
56 голосов
/ 23 апреля 2011

Я ищу интерактивную графическую библиотеку для Python.

Под " graph " я имел в виду набор узлов, соединенных набором вершин (не график значений по оси xy и не сетка пикселей).

Под «интерактивным» я имел в виду, что я могу перетаскивать узлы вокруг, и мне нужно иметь возможность щелкать по узлам / вершинам, и библиотека должна передавать узлы / вершины моим обратным вызовам, которые могут добавлять / удалятьузлы / вершины или отображаемая информация (я не могу загрузить полный график при запуске, так как набор данных слишком большой / сложный; вместо этого я буду загружать только необходимые куски данных в зависимости от пользовательских данных).

By PythonЯ имел в виду язык программирования Python , графическая библиотека должна иметь привязку CPython.У меня есть Python 2.7 и Python 3.1, но я могу понизить до 2.6, если это необходимо.Это требование языка, потому что набор данных, с которым я работаю, имеет только привязку Python.

Библиотека графиков должна поддерживать ориентированный граф и иметь возможность автоматически размещать узлы.Мне нужно поставить метки на узлах.

Предпочтительно, чтобы алгоритм размещения располагал соседние узлы рядом друг с другом.Он должен быть способен обрабатывать от 100 до 1000 узлов и около 300-4000 вершин на моем 4-летнем ноутбуке (обычно я начинаю с примерно 100 узлов, но это число может увеличиться в зависимости от ввода данных пользователем).Предпочтительно это должна быть библиотека с не слишком большим количеством зависимостей (за исключением, возможно, Gnome).Предпочтителен открытый исходный код.

Я уже написал простой прототип своей программы с использованием Tkinter Canvas, но мне нужна более серьезная графическая библиотека для расширения программы.Я посмотрел на graphviz и matplotlib, но, видимо, они предназначены только для работы со статическими графами и, видимо, потребуют значительного объема работы для интерактивных манипуляций (поправьте меня, если я ошибаюсь, я только кратко рассмотрел их),Я также попытался сгенерировать график в файл SVG и использовать его для просмотра с помощью Inkscape, но он слишком медленный и занимает слишком много памяти, и из-за большого количества вершин он становится запутанным беспорядком.

Ответы [ 3 ]

28 голосов
/ 28 апреля 2011

Похоже, что Nodebox может быть тем, что вы хотите:

http://nodebox.net/code/index.php/Graph Mac OSX

http://www.cityinabottle.org/nodebox/ Windows (с использованием OpenGL)

Nodebox screenshot

Объект графа также имеет функции для взаимодействия с мышью, в комплекте в объекте graph.events. Имеет следующие свойства:

  • graph.events.hovered: None или узел, над которым находится мышь.
  • graph.events.pressed: None или узел, на котором находится мышь нажимая вниз.
  • graph.events.dragged: None или перетаскиваемый узел.
  • graph.events.clicked: None или последний нажатый узел.
  • graph.events.popup: когда True, появится всплывающее окно над зависший узел.

Также пришелся к Gephi, похоже, что он может иметь ту функциональность, которую вы хотите.

http://gephi.org/ Windows , Linux и Mac OSX

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

gephi screenshot

7 голосов
/ 23 апреля 2011

Вы обязательно должны взглянуть на библиотеку igraph , если у вас ее нет.

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

Обновление: Другая известная библиотека - NetworkX , для которой есть пакеты Python здесь .Обратите внимание, что программное обеспечение Nodebox для Mac / Windows, рекомендованное Acorn, использует алгоритмы NetworkX.

3 голосов
/ 16 января 2015

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

http://nodebox.net/code/index.php/Graph

с нодбоксом opengl. Это не работает, эта библиотека графов совместима только с нодбоксом Mac OSX. Но в любом случае это нормально, потому что вам это не нужно.

См., Например, следующий вопрос:

Добавление метки к ребру графа в окне узла opnegl

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

Просто удалите

label = "Placeholder"

из кода и все работает.

EDIT:

Я поместил здесь более подробный пример кода: Nodebox open GL Graph, функция размера не распознается. (Ubuntu)

...