2016-08-05 52 views
0

Ich habe eine schnelle Websuche durchgeführt und keine leicht verfügbaren (und von der Bibliothek bereitgestellten) Lösungen gefunden, was meiner Meinung nach ein gut spezifiziertes und ziemlich normales Visualisierungsproblem ist Implementiere es schnell selbst. Aber bevor ich das tat, wollte ich einen gesunden Rat von der Gemeinde bekommen.So visualisieren Sie ein mehrschichtiges Diagramm (für GraphPlan-Planungsalgorithmus)

Ich muss eine sehr spezielle Art von Graphen visualisieren (deshalb möchte ich mich nicht mit einem dieser kraftgesteuerten generischen Layouts beschäftigen, die schwer zu lesen sind), die wie eine Version eines mehrteiligen Graphen für der GraphPlan-Planungsalgorithmus.

Für die Leser, ein typisches Layout ist im Wesentlichen die gleiche wie die eines neuronalen Netzes Multi-Layer: enter image description here

Zur Vereinfachung Ich erwäge nur geradzahlige Schichten (da ungeraden wesentlichen Rand geworden Beschriftungen)

An dieser Stelle genügt es, die Spalten der Knoten einfach als Tabelle mit tabulate darzustellen. Der einzige Haken ist, dass ich die Backpointer (also Kanten) brauche.

Ich denke in der Richtung von matplotlib Raster aber würde es vorziehen, nicht zu niedrig zu gehen. Ich muss nur willkürliche Elemente, von strikt benachbarten Spalten in diesem Raster, schließlich verbinden. Ziemlich einfach.

Antwort

0

Es stellte sich heraus nicht zu schrecklich: enter image description here

Grundsätzlich gilt:

  1. Stored meine Objekte in einem 2D-Array
  2. generiert Xs und Ys für ein Streudiagramm Gitter (einige zusätzliche Pflege erforderlich war handle variable Spaltenhöhe über den zip(*izip_longest(*my2darray)) Trick)
  3. Iterated über meine 2d-Array-Elemente, um ihre Etiketten zu ziehen
  4. Für jede von ihnen zeichnete auch Liniensegmente zu jedem ihrer Kinder aus der vorherigen Spalte.