¿Hay una biblioteca gráfica interactiva para python


Estoy buscando una biblioteca gráfica interactiva para Python.

Por " grafo", me refería a un conjunto de nodos conectados por un conjunto de vértices (no una gráfica de valores sobre el eje x-y, ni una cuadrícula de píxeles).

Por "interactivo", quise decir que puedo arrastrar y soltar los nodos alrededor y necesito poder hacer clic en los nodos / vértices y hacer que la biblioteca pase los nodos / vértices a mis devoluciones de llamada, que pueden agregar / eliminar nodos / vértices o mostrar información (no puedo cargar el gráfico completo en inicio ya que el conjunto de datos es demasiado grande/complejo; en su lugar, cargaré solo los segmentos de datos necesarios dependiendo de las entradas del usuario).

Por Python, me refería al lenguaje de programación Python, la biblioteca gráfica debería tener un enlace CPython. Tengo Python 2.7 y Python 3.1, pero puedo bajar a 2.6 si es necesario. Este requisito de idioma se debe a que el conjunto de datos con el que estoy trabajando solo tiene enlace de Python.

La biblioteca de gráficos debe soportar grafo dirigido y ser capaz de diseñar los nodos automáticamente. Necesito poner etiquetas en los nodos.

Preferiblemente, el algoritmo de layouting debe colocar nodos adyacentes cerca unos de otros. Debería ser capaz de manejar desde 100-1000 nodos y alrededor de 300-4000 vértices razonablemente en mi computadora portátil de 4 años (normalmente empiezo con alrededor de 100 nodos, pero el número podría expandirse dependiendo de la entrada del usuario). Preferiblemente debería ser una biblioteca con no demasiadas dependencias (excepto quizás para Gnome). El código abierto es preferido.

Ya he escrito un prototipo simple de mi programa usando Tkinter Canvas, pero necesito una biblioteca gráfica más seria para expandir el programa. He mirado graphviz y matplotlib, pero aparentemente son solo para trabajar con gráficos estáticos y aparentemente necesitarían una cantidad significativa de trabajo para hacer manipulaciones interactivas (corrígeme si me equivoco, solo los he mirado brevemente). También he intentado generar el gráfico en un archivo SVG y usar Inkscape para verlo, pero es demasiado lento y toma demasiada memoria y debido al gran número de vértices se convierte en un lío enredado.

Author: Lie Ryan, 2011-04-23

3 answers

Parece que Nodebox podría ser lo que quieres:

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

Http://www.cityinabottle.org/nodebox/ Windows (usando OpenGL)

Nodebox captura de pantalla

El objeto graph también tiene funcionalidad para la interacción del ratón, incluido en el objeto graph.events. Tiene la propiedades siguientes:

  • graph.events.hovered: None o el nodo sobre el que pasa el ratón.
  • graph.events.pressed: None o el nodo en el que se encuentra el ratón presionando hacia abajo.
  • graph.events.dragged: None o el nodo que está siendo arrastrado.
  • graph.events.clicked: None o el último nodo en el que se hizo clic.
  • graph.events.popup: cuando True, mostrará una ventana emergente sobre el nodo suspendido.

También llegó a través de Gephi, parece que podría tener la funcionalidad que desea también.

Http://gephi.org/ Windows, Linux y Mac OSX

Gephi es una visualización interactiva y plataforma de exploración para todo tipo de redes y sistemas complejos, gráficos dinámicos y jerárquicos.

gephi captura de pantalla

 26
Author: Acorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-28 13:41:51

Definitivamente deberías mirar la biblioteca igraph si no lo has hecho.

Es una potente biblioteca que puede manejar gráficos grandes y diferentes estilos de diseño. También se puede utilizar para gráficos dirigidos y para visualizaciones interactivas y no interactivas en 2D y 3D de acuerdo con la lista de características . También hay un tutorial .

Actualización: Otra biblioteca conocida es NetworkX para la que hay paquetes de Python aquí. Tenga en cuenta que el Nodebox de software para Mac/Windows, recomendado por Acorn, utiliza algoritmos NetworkX.

 7
Author: lecodesportif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-28 13:48:46

Tengo el mismo problema. Al final, creo que nodebox opengl parece hacer el truco. No intente utilizar la biblioteca de gráficos en el siguiente enlace

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

Con nodebox opengl. No funciona, esa biblioteca de gráficos solo es compatible con mac OSX nodebox. Pero en cualquier caso eso está bien porque no lo necesitas.

Ver por ejemplo la siguiente pregunta:

Agregar etiqueta a un borde de un gráfico en nodebox opnegl

Muestra un código de ejemplo que funciona para mí, el código se puede modificar para que al hacer clic en un nodo no solo le permita mover el nodo, sino que también le permita modificar el gráfico.

Simplemente borra

label = "Placeholder"

Del código y funciona.

EDITAR:

Pongo un código de ejemplo más detallado aquí: Nodebox open GL Graph, size function not recognized. (Ubuntu)

 2
Author: patapouf_ai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:00:20