Ich versuche ein Flussdiagramm einer Baumstruktur zu erstellen . Ich konnte mit networkx repräsentative Diagramme erstellen, aber ich brauche eine Möglichkeit, die Baumstruktur bei der Ausgabe eines Diagramms anzuzeigen . Ich verwende matplotlib.pylab, um das Diagramm zu zeichnen.
Ich muss die Daten in einer Struktur anzeigen, die der hier gezeigten ähnlich ist . Obwohl ich keine Subgraphen habe.
Wie kann ich eine solche Struktur garantieren?
Beispiele für die Ungläubigen:
Ich konnte die Grafiken mit Pylab und Graphviz anzeigen, biete aber auch nicht die Baumstruktur an, nach der ich suche. Ich habe jedes Layout ausprobiert, das networkx zu bieten hat, aber keines von ihnen weist eine Hierarchie auf . Ich bin mir nur nicht sicher, welche Optionen / Modi ich geben soll ODER ob ich Gewichte verwenden muss. Irgendwelche Vorschläge würden einem Haufen helfen.
@jterrace:
Hier ist ein grober Überblick darüber, was ich zur Erstellung der obigen Diagramme verwendet habe. Ich habe einige Labels hinzugefügt, aber ansonsten ist es dasselbe.
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_node("ROOT")
for i in xrange(5):
G.add_node("Child_%i" % i)
G.add_node("Grandchild_%i" % i)
G.add_node("Greatgrandchild_%i" % i)
G.add_edge("ROOT", "Child_%i" % i)
G.add_edge("Child_%i" % i, "Grandchild_%i" % i)
G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i)
plt.title("draw_networkx")
nx.draw_networkx(G)
plt.show()
g = nx.full_rary_tree(2, 10)
Wenn ich die Kanten[(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), ... ]
pygraphviz
bei der regelmäßigen Installation haben , versuchen Sie espip install --install-option="--include-path=/usr/local/include/" --install-option="--library-path=/usr/local/lib/" pygraphviz
graphviz
(in meinem Fall mitbrew install graphviz
).Sie können pygraphviz verwenden, um näher zu kommen:
>>> import pygraphviz >>> import networkx >>> import networkx as nx >>> G = nx.Graph() >>> G.add_node("ROOT") >>> for i in xrange(5): ... G.add_node("Child_%i" % i) ... G.add_node("Grandchild_%i" % i) ... G.add_node("Greatgrandchild_%i" % i) ... G.add_edge("ROOT", "Child_%i" % i) ... G.add_edge("Child_%i" % i, "Grandchild_%i" % i) ... G.add_edge("Grandchild_%i" % i, "Greatgrandchild_%i" % i) >>> A = nx.to_agraph(G) >>> A.layout('dot', args='-Nfontsize=10 -Nwidth=".2" -Nheight=".2" -Nmargin=0 -Gfontsize=8') >>> A.draw('test.png')
Ergebnis:
Hinweis: Ich habe die graphviz-Optionen von dem oben angegebenen Link kopiert. Ich bin mir nicht sicher, warum das 4. Kind nicht streng vertikal, sondern oben gezeichnet wird. Vielleicht kann jemand helfen, der mehr über die Graphviz-Optionen weiß.
quelle
to_agraph
Funktion befindet sich jetzt innx.nx_agraph.to_agraph
.Sie können grandalf für eine reine Python-Lösung verwenden, wenn Sie graphviz nicht installieren möchten.
Diese Art der Visualisierung wird auch als geschichtete Diagrammzeichnung oder als Diagrammzeichnung im Sugiyama-Stil bezeichnet , mit der viele Arten von Diagrammen angezeigt werden können, einschließlich Nichtbäumen.
Siehe meine Antwort auf eine andere Frage für Details und Implementierung.
quelle