network - python graph library
¿Hay una biblioteca gráfica interactiva para python (3)
Definitivamente debería mirar la biblioteca igraph si no lo hizo.
Es una potente biblioteca que puede manejar grandes gráficos y diferentes estilos de diseño. También se puede usar para gráficos dirigidos y para visualizaciones interactivas y no interactivas en 2D y 3D según la lista de features . También hay un tutorial .
Actualización: Otra biblioteca conocida es NetworkX para la cual hay paquetes de Python here . Tenga en cuenta que el Nodebox del software Mac / Windows, recomendado por Acorn, usa algoritmos NetworkX.
Estoy buscando una biblioteca gráfica interactiva para Python.
Por " graph ", me refería a un conjunto de nodos conectados por un conjunto de vértices (no una gráfica de valores sobre un eje xy, ni una cuadrícula de píxeles).
Por "interactivo", quise decir que puedo arrastrar y soltar los nodos y tengo que 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 al inicio ya que el conjunto de datos es demasiado grande / complejo, en su lugar solo cargaré los datos necesarios dependiendo de las entradas del usuario).
Por Python, quise decir el 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 degradar a 2.6 si es necesario. Este requisito de idioma es porque el conjunto de datos con el que estoy trabajando solo tiene enlace de Python.
La biblioteca de gráficos debe admitir un gráfico dirigido y poder diseñar los nodos automáticamente. Necesito poner etiquetas en los nodos.
Preferiblemente, el algoritmo de disposición debe colocar nodos adyacentes uno cerca del otro. Debería poder manejar de 100 a 1000 nodos y alrededor de 300-4000 vértices razonablemente en mi computadora portátil de 4 años (normalmente comienzo 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 demasiadas dependencias (excepto tal vez para Gnome). Se prefiere el código abierto.
Ya escribí un prototipo simple de mi programa usando Tkinter Canvas, pero necesito una biblioteca gráfica más seria para expandir el programa. He visto graphviz y matplotlib, pero aparentemente solo sirven para trabajar con gráficos estáticos y aparentemente necesitarían una gran cantidad de trabajo para realizar manipulaciones interactivas (corríjanme si me equivoco, solo los he mirado brevemente) . También traté de generar el gráfico en un archivo SVG y utilizar Inkscape para verlo, pero es demasiado lento y requiere demasiada memoria, y debido a la gran cantidad de vértices se convierte en un desastre.
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)
El objeto gráfico también tiene funcionalidad para la interacción del mouse, incluido en el objeto
graph.events
. Tiene las siguientes propiedades:
graph.events.hovered
:None
o el nodo sobre el cual segraph.events.hovered
el mouse.graph.events.pressed
:None
o el nodo al que presiona el mouse.graph.events.dragged
:None
o el nodo que se está arrastrando.graph.events.clicked
:None
o el último nodo en el que se hizo clic.graph.events.popup
: cuando seaTrue
, mostrará una ventana emergente sobre el nodo anclado.
También se encontró con Gephi, parece que también podría tener la funcionalidad que usted desea.
http://gephi.org/ Windows , Linux y Mac OSX
Gephi es una plataforma interactiva de visualización y exploración para todo tipo de redes y sistemas complejos, gráficos dinámicos y jerárquicos.
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 el nodobox de mac OSX. 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 el código de ejemplo que funciona para mí, el código se puede modificar para que al hacer clic en un nodo no solo pueda mover el nodo, sino que también le permita modificar el gráfico.
Solo borre
label = "Placeholder"
del código y funciona.
EDITAR:
Puse un código de ejemplo más detallado aquí: Nodebox open GL Graph, función de tamaño no reconocida. (Ubuntu)