django - Gráficos interactivos de Graphviz en una aplicación web.
web-applications pydot (6)
Estoy tratando de hacer algunas visualizaciones gráficas interactivas en mi aplicación web Django usando Python. Encontré Graphviz y pude generar un gráfico estático (como una imagen .png) en mi aplicación usando Pydot (interfaz de Python para el lenguaje de puntos de Graphviz).
Sin embargo, busco hacer que mis gráficos sean más interactivos, como poder resaltar nodos al pasar el mouse sobre ellos, hacer que se puedan hacer clic en los nodos, arrastrar los nodos a una ubicación diferente y hacer zoom en el gráfico.
¿Hay alguna manera de hacer esto en Graphviz? ¿O en general, hay una manera de hacer un gráfico interactivo para mi aplicación Django sin tener que usar Flash? No quiero usar flash porque no estoy familiarizado con él y también porque quiero visualizar un conjunto de datos bastante grande.
Hay Canviz ( source ). Sin embargo, los nodos aún no se pueden hacer clic (estaban en una versión anterior que usaba mapas de imágenes. La base del código ha cambiado y ahora el renderizado está ocurriendo en el lado del cliente con javascript, por lo que los enlaces en los que se puede hacer clic todavía no están habilitados).
Este es el mejor que he encontrado, sin embargo, son muchos otros.
mxGraph (no gratis)
Hice lo que intentas hacer no hace mucho. El contexto estaba visualizando un esquema de SalesForce gnarly.
Lo primero, graphviz solo es bueno para trazar, no realmente para dibujar. Puede generar SVG, pero no pude hacer que funcione con IE después de un esfuerzo considerable (que resultó ser infructuoso).
Encontré este Java Applet ZGRViewer suficiente, y aunque los applets se sienten un poco anticuados para mi gusto, funcionó muy bien en todos los navegadores.
Básicamente, codifiqué manualmente un proceso que invocaba el servicio que generaba los archivos de puntos y los ejecutaba pensando (¿dotty, is think?) - el applet de visualización lee el formato de archivo de puntos nativo.
También me encontré con algo en lo que pensé para un V2 (que nunca sucedió): es parte del kit de herramientas de control AJAX: Seadragon .
Si quieres ver el código en ASP.NET, puedo publicarlo.
Parece que un enfoque que se ajusta a lo que está tratando de hacer podría ser usar svg en el navegador y / o javascript. Creo que la mayoría de los navegadores modernos son compatibles con SVG y te permitirían hacer algunos gráficos interactivos bastante buenos. El servidor podría proporcionar una fuente json de los puntos de datos necesarios para representar el gráfico. No conozco de antemano las herramientas disponibles, pero he visto algunas demostraciones gráficas bastante interesantes construidas sin flash a través de los enfoques del lado del cliente.
Como alternativa, puede representar previamente un grupo de imágenes gráficas que el usuario probablemente vea y luego simplemente recuperarlas cuando el usuario interactúe con la gráfica. Esto podría funcionar si los gráficos no cambian con tanta frecuencia y si el número de alteraciones que el usuario haría sería pequeño, pero tendría que volver a renderizar cada vez que el gráfico cambia.
Puede usar D3.js para la visualización de gráficos (consulte aquí para ver ejemplos de visualizaciones de gráficos en D3js , y vea Cómo hacer una visualización de red interactiva ).
Para el back-end (si es necesario tener algo más que un archivo json para representar el gráfico, es decir, si es grande), puede usar un módulo de Python para los gráficos, NetworkX .
Nota al margen, aquí está mi ejemplo simple de visualización de gráficos interactivos :
Puedes hacer algo como esto simplemente con DOT y HTML.
Genere mapas del lado del cliente y superpóngalos sobre sus imágenes PNG. (Inserte el código del mapa en la página HTML).
dot test.dot -Tpng -o test.png -Tcmapx -o test.map
Las exportaciones de SVG son directamente seleccionables.
Pruebe el Javascript Infovis Toolkit . Todo está implementado en un lienzo del navegador, por lo que no se necesita Flash, solo un navegador decente con soporte para la etiqueta <canvas>
. Los ejemplos de visualización de gráficos están here , here y here , otras demostraciones están here .