ejemplo - graphviz>& lt
Creando Bordes Rectos en Graphviz (1)
Quiero crear un diagrama de flujo (similar a Visio) usando Graphviz. Aquí hay un ejemplo de un gráfico.
digraph start_up {
node [style = rounded];
node [shape = rect] start end;
node [style = ""];
node [shape = diamond] "USB/nCommand/nArrived";
start -> "Initialize/nCode";
"Initialize/nCode" -> "USB/nCommand/nArrived";
"USB/nCommand/nArrived" -> "USB/nCommand/nArrived" [label="No" tailport=w headport=n];
"USB/nCommand/nArrived" -> "Has USB 3.0/nInterface Been/nSelected" [label = "Yes"];
"Has USB 3.0/nInterface Been/nSelected" -> end
}
El problema es cuando renderizo esto en Graphviz la línea creada por "USB/nCommand/nArrived" -> "USB/nCommand/nArrived" [label="No" tailport=w headport=n];
se ve bastante feo No me importaría las líneas curvas, pero esta línea se ve deformada. Puedes ver lo que crea Graphviz aquí
¿Hay alguna manera de hacer que esto se vea mejor?
Creo que es mejor aprender punto por ejemplo. Solo lea mis comentarios y estaré encantado de responder si algo no está claro.
Como nodo lateral : si bien graphviz es ideal para generar gráficos para grandes conjuntos de datos, es menos sorprendente para crear cosas como diagramas ER, flujos de flujo y diagramas de secuencia. Es posible y relativamente sencillo, pero la cantidad de tiempo que tiene que dedicar para hacer que algo salga bien a menudo no está justificada porque podría lograr lo mismo con una herramienta de modelado Wsywig-GUI en una fracción del tiempo. Sin embargo, el tiempo que dedique a hacerlo le ayudará a aprender la sintaxis y las propiedades del lenguaje, lo que realmente le será útil cuando necesite visualizar algún problema grande o complejo (donde las herramientas de modelado de GUI serían inútiles).
digraph start_up {
{
/* fake levels (level0 -> level1) and support nodes
*
* graphviz to charts is what latex is to documents,
* sometimes you''ll have to fight it.
* This is typically done by defining levels and connection points that
* don''t really have anything to do with your graph, but are used to
* force the graph to appear in a certain way.
*/
node [shape=none, /*label="."*/]; l1a; l2a; l3a; l4a; l5a; l6a;
node [shape=square label="no"]; l20a;
}
{ /* connectiong point for the no arrow above "arrived" */
node [width=0 shape=point label=""];
d1; no;
}
node [style = rounded];
node [shape = rect] start end;
node [style = ""];
node [shape = diamond]; {
node [label="USB/nCommand/nArrived"]; arrived;
node [label="Has USB 3.0/nInterface Been/nSelected"]; selected;
node [label="Initialize/nCode"]; init;
}
start -> init;
/*init -> arrived; */
init -> d1 [arrowhead=none];
d1 -> arrived;
/*
* tricky part:
* since nodes in a digrap go either from top to bottom or left to right, we
* can usually not connect (->) two nodes and have them appear on the same
* level unless the connection is specified within a block that has the
* parameter `rank'' set to `same''
*/
l20a->no [arrowhead=none];
{ rank=same; no -> arrived [dir=back arrowtail=none]; }
{ rank=same; l20a -> d1; }
/*arrived -> arrived;*/ /* [label="No" tailport=w headport=n]; */
arrived -> selected [label = "Yes"];
selected -> end
/* just to demonstrate */
l1a-> l2a-> l3a-> l4a-> l5a-> l6a;
}