Estoy intentando producir un diagrama de flujo de una estructura de árbol . He podido crear gráficos representativos con networkx, pero necesito una forma de mostrar la estructura del árbol cuando genero un gráfico. Estoy usando matplotlib.pylab para trazar el gráfico.
Necesito mostrar los datos en una estructura similar a la que se muestra aquí . Aunque no tengo subgráficos.
¿Cómo puedo garantizar una estructura así?
Ejemplos para los incrédulos:
He podido mostrar los gráficos con pylab y graphviz, pero ninguno ofrece la estructura de árbol que estoy buscando. He probado todos los diseños que ofrece networkx, pero ninguno muestra una jerarquía . No estoy seguro de qué opciones / modo darle O si necesito usar pesas. Cualquier sugerencia ayudaría mucho.
@jterrace:
Aquí hay un esquema general de lo que usé para producir los gráficos anteriores. Agregué algunas etiquetas, pero aparte de eso, es lo mismo.
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)
Si imprimo los bordes que obtengo:[(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), ... ]
pero los visualizará en un orden diferente ...pygraphviz
de manera regular, intentepip install --install-option="--include-path=/usr/local/include/" --install-option="--library-path=/usr/local/lib/" pygraphviz
graphviz
(en mi caso usarbrew install graphviz
).Puedes usar pygraphviz para acercarte:
>>> 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')
Resultado:
Tenga en cuenta que copié las opciones de graphviz del enlace que publicó arriba. No estoy seguro de por qué el cuarto niño se dibuja en la parte superior en lugar de en formato estrictamente vertical. Quizás alguien que sepa más sobre las opciones de Graphviz pueda ayudar con eso.
fuente
to_agraph
función ahora se encuentra ennx.nx_agraph.to_agraph
.Puede usar grandalf para una solución solo de Python, si no desea instalar graphviz.
Además, este tipo de visualización se denomina dibujo de gráfico en capas o dibujo de gráfico de estilo Sugiyama. , que puede mostrar muchos tipos de gráficos, incluidos los que no son árboles.
Consulte mi respuesta a una pregunta diferente para obtener detalles e implementación.
fuente