tutorial mac itop example graphviz

mac - Graphviz saca un lío



graphviz python (3)

Aquí hay algunos pasos en una mejor dirección:

  • nodesep no es un atributo de nodo, y probablemente no haga lo que usted esperaba. Pero sigue siendo útil en tu caso:

    ... esto afecta el espaciado entre los bucles en un solo nodo, o se multiplica entre un par de nodos.

  • No creo que el peso del borde cambie algo si lo cambias para todos los bordes.
  • Habilitar splines es a menudo una buena idea.
  • Agregar espacio adicional alrededor de los nodos se puede hacer con sep
  • overlap tiene más valores que verdadero / falso. A menudo, la scalexy me resulta útil.
  • Una vez que la distribución de nodos es correcta, puede ajustar las posiciones de las etiquetas utilizando una combinación de headlabel / taillabel , labeldistance entre labelangle y labelangle (rojo en el ejemplo a continuación para resaltarlas).

Aquí está la muestra modificada:

digraph n { splines=true; sep="+25,25"; overlap=scalexy; nodesep=0.6; node [fontsize=11]; //edge[weight=0.2]; A -> B [label="I/5"] A -> A [label="*/0"] A -> C [label="ii/2"] A -> H [label="vii/1"] B -> D [label="iii/1"] B -> E [label="IV/2"] B -> F [headlabel="V/2", labeldistance=4, labelangle=-10, labelfontcolor=red] B -> B [label="vi/2"] C -> F [label="V/2"] C -> H [label="vii/1"] D -> E [label="IV/2"] E -> D [label="iii/2"] E -> G [label="iv/1"] E -> F [headlabel="V/3", labeldistance=8, labelangle=-7, labelfontcolor=red] F -> B [label="I/4"] F -> B [label="vi/1"] F -> B [label="*/0"] G -> B [taillabel="I/5", labeldistance=4, labelangle=15, labelfontcolor=red] H -> B [label="vi/1"] }

Estoy tratando de visualizar los siguientes datos en formato de punto usando GraphViz:

digraph n { node [nodesep=2.0, fontsize=11]; graph [ overlap=false]; edge[weight=0.2]; A -> B [label="I/5"] A -> A [label="*/0"] A -> C [label="ii/2"] A -> H [label="vii/1"] B -> D [label="iii/1"] B -> E [label="IV/2"] B -> F [label="V/2"] B -> B [label="vi/2"] C -> F [label="V/2"] C -> H [label="vii/1"] D -> E [label="IV/2"] E -> D [label="iii/2"] E -> G [label="iv/1"] E -> F [label="V/3"] F -> B [label="I/4"] F -> B [label="vi/1"] F -> B [label="*/0"] G -> B [label="I/5"] H -> B [label="vi/1"] }

Ejecutando el siguiente comando: neato -Tpng Chord_NFA.dot > Chord_NFA.png

me da esta salida:

Me gustaría que encajara en A4 y que ninguno de los bordes se superponga o cruce sobre un nodo. Esto es posible (matemáticamente) porque yo mismo lo hice con un biro.


Jugué con algunos y obtuve esto:

digraph n { node [nodesep=2.0, fontsize=11]; graph [overlap = false]; subgraph cluster_a { style=invisible; A; B; H; } subgraph cluster_b { style=invisible; D; E; G; } subgraph cluster_c { style=invisible; C; F; } A -> B [label="I/5"]; A -> A [label="*/0"]; A -> C [label="ii/2"]; A -> H [label="vii/1"]; B:w -> D [label="iii/1"]; B:nw -> E [minlen=3 label="IV/2"]; B -> F [minlen=2 label="V/2"]; B -> B [label="vi/2"]; C -> F [minlen=2 label="V/2"]; C -> H [label="vii/1"]; D -> E [label="IV/2"]; D -> E [minlen=2 dir=back label="iii/2"]; G -> E [minlen=2 dir=back label="iv/1"]; F -> E [dir=back label="V/3"]; B -> F [minlen=2 dir=back label="I/4"]; B -> F [minlen=2 dir=back label="vi/1"]; B -> F [minlen=2 dir=back label="*/0"]; B -> G [dir=back label="I/5"]; H -> B [label="vi/1"]; }

Compilar con:

dot -Tpng -o Chord_NFA.png Chord_NFA.gv

La salida es esta, sin ningún cruce de líneas:

El truco es:

  1. Para agregar el atributo minlen para forzar cierta separación, se otorga más espacio para la representación sin superposiciones y cruces.

  2. Para invertir la lógica de algunos bordes (haciéndolos no invertidos con dir = back). De esta manera, el punto siempre ve un gráfico acíclico y puede ordenar los bordes sin confundirse.

  3. Enfocarse primero en algunos subgrafos y agrupar sus nodos en grupos para brindarles cierta "protección" contra la interferencia al renderizar el resto del gráfico.


Usando el motor de puntos obtuve la siguiente salida sin cambiar el archivo de puntos que debería caber en A4. La interpretación de Marapet hace un mejor uso del espacio.