Есть ли интерактивная графическая библиотека для python


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

By"графика", Я имел в виду набор узлов, соединенных набором вершин (не график значений по оси x-y, ни сетка пикселей).

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

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

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

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

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

3   51   2011-04-23 00:46:30

3 ответа:

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

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

http://www.cityinabottle.org/nodebox/ Windows (через OpenGL)

Nodebox screenshot

объект graph также имеет функциональность для взаимодействия с мышью, в комплекте в

вы должны обязательно посмотреть на igraph библиотека, Если у вас нет.

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

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

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

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

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

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

добавить метки ребро графа в nodebox opnegl

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

удалить

label = "Placeholder"

из кода и он работает.

EDIT:

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