Zeichnen & - Rendering-Mehrwege-Baum in Python
Weiß jemand, wie ich den plot ein Mehrwege-Baum in einem ästhetisch plausible Art und Weise?
info:
- mehr oder weniger als 100 Artikel
- jede Ebene haben in etwa die gleiche Anzahl von Elementen
- 10 Level
- jeder Knoten zwischen 0(Blatt) und 6 Kinder
- jeder Knoten angeben, es ist ein eigenes level, egal, seine Wurzeln.
Ich bin derzeit mit PIL, teilt sich jede "Zeile" in img.size()[0]
/Anzahl der Knoten aus, und zeichnen von Linien mit draw.line
zu repräsentieren, und Kanten, aber es ist komplett Durcheinander
Ich hoffe Ihr könnt mir helfen =], alle Informationen benötigt, poste ich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, Rendern von Grafiken ist der Besondere genius der graphviz, was auch passiert, haben mehrere Bibliotheken, die python-Bindungen. Meiner Meinung nach, die beste von diesen Bindungen Bibliotheken ist pygraphviz. Graphviz ist wahrscheinlich die beste Lösung und wahrscheinlich auch die einfachste.
Den besonderen layout, das Sie in Ihrer Frage beschreiben, eine hierarchische, geschichtete Regelung, erfolgt mühelos durch graphviz' dot - layout-engine. Dot führt das rendering, um sicherzustellen, dass der graph wird angelegt in einem natürlichen Baum-Konfiguration, D. H., Eltern-Knoten positioniert sind, über Ihre Kinder; Knoten des gleichen Rangs (Ebenen von der Wurzel) sind equi-positioniert w/r/t die y-Achse, wenn möglich, und der natürlichen Symmetrie ist erhalten, wenn möglich.
(Hinweis: verwechseln, dot bezieht sich auf eine von mehreren layout-engines, die aus graphviz, aber dot ist auch der name und die Dateierweiterung der Datei-format für alle graphviz Dokumente, unabhängig davon, wie Sie gerendert werden).
Wie Sie sehen können in meinem code, der folgt, mit pygraphviz, es ist einfach zu wählen dot als layout-engine für Ihr Diagramm, wenn es nicht eigentlich der Standard (neato ist).
Hier eine schnelle Grafik die ich gemacht und dann gerendert mit dot--erstellt und gerendert mit graphviz via pygraphviz.
Beachten Sie, dass der graph hat ein perfektes layout--Knoten den gleichen Grad sind auf der gleichen Ebene entlang einer vertikalen Achse, Kinder gerendert werden, unten die Eltern und natürlich 'Symmetrie' wird beibehalten, wenn möglich (z.B. ein Eltern-Knoten positioniert ist, zwischen und über seine zwei Kind-Knoten. Und wie man sehen kann, keiner von meinen code manuell steuert layout--graphviz, d.h., dot, behandelt es automatisch.