2010-12-17 16 views
20

zur Visualisierung einer Sequenz von Knoten durch Kanten in Python codiert verbunden.Grafik-Rendering in Python (Flussdiagramm Visualisierung)

Suche nach einer Python-Bibliothek, um solche Graph-Daten zu visualisieren.

entweder eine Bibliothek in Python oder Python-Bindungen geschrieben, ist ok

(i von Visustin bewusst sind, aber die Suche nach Alternativen)

+0

Das ist auch gut: http://flowchart.js.org –

Antwort

26

Graphviz die beste Option, meiner Meinung nach ist.

Graphviz ist die Premiere Graph Rendering/Layout-Bibliothek; Es ist ausgereift, stabil, Open Source und kostenlos. Es ist kein dediziertes Flussdiagramm oder Diagrammpaket, aber sein Kernanwendungsfall - dh effizientes und ästhetisches Rendern von Objekten, die aus Knoten und Kanten bestehen, subsumiert offensichtlich die Fließdiagrammzeichnung - insbesondere, weil seine API verschiedene Constraints setzen kann auf dem Layout, um das Rendern in den verschiedenen Formaten zu unterstützen - z. B. können Sie alle Knoten der gleichen Ebene (die gleiche Anzahl von Eltern aus dem Stamm) in einer einzigen mittig ausgerichteten Zeile darstellen.

Graphviz ist keine Python-Bibliothek (es ist in C geschrieben); Es sind jedoch qualitativ hochwertige Python-Bindungen verfügbar.

Die Python-Graphviz-Bibliothek, mit der ich am meisten vertraut bin, ist pygraphviz, was ausgezeichnet ist. Die anderen beiden sind pydot und yapgvb. Ich habe beide mindestens ein paar Mal verwendet. Jeder ist kleiner als pygraphviz (was je nach Anwendungsfall von Vorteil sein kann); Darüber hinaus ist weder dokumentiert als auch pygraphviz.

Zum Glück alle drei dieser Python-Bibliotheken sind dünne Wrapper über Graphviz, so dass keiner verbergen die leichte, elegante Graphviz Syntax (die Punkt Sprache).

alt text

Hier ist der Code ist (in graphviz‘Punkt Sprache) Ich benutzen den kleinen "Flussdiagramm" weiter unten zu erstellen:

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

Ich denke, die Frage ist über _automatic_ Generator. Entschuldigung, ich habe noch keins gesehen, aber was ist gut an der automatischen Generierung von Flow-Chart? AFAIK-Charts und ausgefallene UML-Sachen sollten helfen, die Lösung zu überdenken und eine andere Perspektive als Code zu bekommen, so dass es für mich automatisch ein Schuss in den Fuß ist. –

8

wie doug, würde ich Graphviz vorschlagen.

Ich möchte auch erwähnen, dass Sie auch Grafiken in der sehr einfachen dot language direkt schreiben können (sie können dann mit Graphviz oder anderen Tools geplottet werden); Dies ist eine leichtere Alternative zur Verwendung von Pydot, ohne dass der Code von einem Modul abhängig ist.

+1

immer ein Fan von minimalistischen Lösungen (Erstellen von Dot-Dateien direkt), +1 von mir. – doug

1

gprof2dot.py kann den Ausführungsablauf in Ihrem Programm automatisch profilieren und visualisieren. Es kann als reciple 578138 auf ActiveState Code gefunden werden. Bitte beachten Sie die Batch-Datei am Ende des Programms.