2010-12-17 39 views
20

para visualizar una secuencia de nodos conectados por bordes codificados en python.representación gráfica en python (visualización de diagrama de flujo)

buscando una biblioteca de python para visualizar dichos datos de gráfico.

ya sea una biblioteca escrita en Python o pitón encuadernaciones, está bien

(soy consciente de Visustin, pero en busca de alternativas)

+0

Este también es bueno: http://flowchart.js.org –

Respuesta

26

Graphviz es la mejor opción en mi opinión.

Graphviz es la biblioteca principal de representación/diseño gráfico; es maduro, estable, de código abierto y gratuito. No es un diagrama de flujo dedicado o un paquete de diagramación, pero su caso de uso principal, es decir, la representación eficiente y estética de objetos compuestos por nodos y bordes, obviamente subsume el diagrama de flujo, particularmente porque su API permite al usuario establecer varias restricciones en el diseño para alentar el procesamiento en los diversos formatos, por ejemplo, puede requerir que todos los nodos del mismo nivel (el mismo número de padres de la raíz) se procesen en una única fila alineada al centro.

Graphviz no es una biblioteca de Python (está escrita en C); sin embargo, hay enlaces de python de alta calidad disponibles.

La biblioteca python-Graphviz con la que estoy más familiarizado es pygraphviz, que es excelente.

Los otros dos son pydot y yapgvb. He usado ambos al menos algunas veces. Cada uno es más pequeño que pygraphviz (lo que podría ser una ventaja según su caso de uso); Además, ni está documentado ni pygraphviz.

Afortunadamente, los tres de estas bibliotecas de Python son envolturas delgadas sobre Graphviz, por lo que ninguno ocultar la sintaxis de peso ligero, elegante Graphviz (el punto idioma).

alt text

Aquí está el código (en graphviz' punto idioma) que usé para crear el pequeño "diagrama de flujo" a continuación:

digraph { 

    node [ fill=cornflowerblue, 
      fontcolor=white, 
      shape=diamond, 
      style=filled]; 

    Step1 [ color=darkgoldenrod2, 
      fontcolor=navy, 
      label=start, 
      shape=box]; 

    Step2; 

    Step3a [ style=filled, 
      fillcolor=grey80, 
      color=grey80, 
      shape=circle, 
      fontcolor=navy]; 

    Step1 -> Step2; 
    Step1 -> Step2a; 
    Step2a -> Step3a; 
    Step3; 
    Step3a -> Step3; 
    Step3a -> Step2b; 
    Step2 -> Step2b; 
    Step2b -> Step3; 
    End [ shape=rectangle, 
     color=darkgoldenrod2, 
     fontcolor=navy]; 
    Step3 -> End [label=193]; 
} 
+1

Creo que la pregunta es sobre _automatic_ generator. Lo siento, no he visto ninguno, pero ¿qué tiene de bueno la generación automática de diagramas de flujo? Los gráficos AFAIK y las cosas sofisticadas de UML, deberían ayudar a replantear la solución y obtener una perspectiva distinta al código, por lo que hacer que sea automática para mí es una sesión en el pie. –

8

como Doug, sugeriría Graphviz.

También me gustaría mencionar que también se pueden escribir gráficos directamente en el muy simple dot language (luego se pueden trazar con Graphviz u otras herramientas); esta es una alternativa más ligera que usar pydot, sin dependencia de tu código en ningún módulo.

+1

siempre soy fan de las soluciones minimalistas (creando archivos de puntos directamente), +1 de mi parte. – doug

1

gprof2dot.py puede automáticamente crear un perfil y visualizar el flujo de ejecución en su programa. Se puede encontrar como reciple 578138 en ActiveState Code. Tenga en cuenta el archivo por lotes al final del programa.

Cuestiones relacionadas