style open node gvedit for fdp example graphviz subgraph

node - open graphviz file



Subgrafos de arriba a abajo, de izquierda a derecha dentro de subgrafos (3)

El uso de la restricción = falso debería hacer que los nodos de sus subgrafos se conviertan en la forma en que desea http://www.graphviz.org/doc/info/attrs.html#d:constraint

subgraph clusterB { label=B "0B" "1B" "2B" -> "0B" [constraint=false label=•] }

Después de eso, encontrarás que tus subgrafos no se alinean entre sí de la manera que deseas. Algo como esto podría resolver eso.

"0A" -> "0B" -> "0C" -> "0D" -> "0E" [weight=999 style=invis];

Me gustaría que mi gráfica se vea así:

Pero solo puedo conseguir esto:

El problema es que rankdir no funciona en el subgraph . Entonces, ¿cómo emularlo?

El código:

digraph G { node [shape = circle] 0 [style = invis] 0 -> "0A" subgraph clusterA { label=A "0A" "1A" "2A" -> "0A" [label=•] } subgraph clusterB { label=B "0B" "1B" "2B" -> "0B" [label=•] } subgraph clusterC { label=C "0C" "1C" "2C" -> "0C" [label=•] } subgraph clusterD { label=D "0D" "1D" "2D" -> "0D" [label=•] } subgraph clusterE { label=E "0E" "1E" "2E" -> "0E" [label=•] } subgraph clusterF { label=F {node [shape = doublecircle] "0F" "1F"} "2F" -> "0F" [label=•] } "0A" -> "1B" [label=a] "1A" -> "2B" [label=a] "0B" -> "1C" [label=b] "1B" -> "2C" [label=b] "0C" -> "1D" [label=c] "1C" -> "2D" [label=c] "0D" -> "1E" [label=d] "1D" -> "2E" [label=d] "0E" -> "1F" [label=e] "1E" -> "2F" [label=e] }


La reproducción de diseños de gráficos particulares generalmente se puede lograr con:

  • Nodos y aristas invisibles
  • restricciones de rango

Así es como reproduje su gráfica, o al menos una parte de ella:

digraph g { rankdir="LR"; node[shape = circle, fontsize=14]; fontsize=18; labeljust="l"; edge[style=invis, fontsize=12]; { rank=same; 0 [style = invis]; 01 [style = invis]; 02 [style=invis]; 0 -> 01 -> 02; } subgraph clusterA { "0A" -> "1A" -> "2A"; "2A" -> "0A" [label=".", constraint=false, style=solid]; label="A"; } subgraph clusterB { "0B" -> "1B" -> "2B"; "2B" -> "0B" [label=".", constraint=false, style=solid]; label="B"; } subgraph clusterC { "0C" -> "1C" -> "2C"; "2C" -> "0C" [label=".", constraint=false, style=solid]; label="C"; } 0 -> "0A"[style=solid]; 01 -> "0B"[style=invis]; 02 -> "0C"[style=invis]; // edges between clusters edge[constraint=false, style=solid]; "0A" -> "1B" [label=a] "1A" -> "2B" [label=a] "0B" -> "1C" [label=b] "1B" -> "2C" [label=b] }

Esta solución no es muy intuitiva. Un par de puntos para lograr esto:

  • Elegí rankdir="LR" que resultó en bordes más agradables que en TB , aunque en realidad no se corresponde con la dirección del gráfico
  • Los nodos y bordes invisibles se usan para los nodos de rango superior (0, 01, 02) para que los grupos se alineen a la izquierda.
  • Los nodos superiores (invisibles) están obligados al mismo rango y están vinculados por bordes invisibles, lo que garantizará que los grupos vinculados a cada nodo aparezcan en el orden correcto.

El resultado es:


Una actualización sobre la respuesta de @marapet usando group

digraph g { rankdir="LR"; node[shape = circle, fontsize=14]; fontsize=18; labeljust="l"; edge[style=invis, fontsize=12]; { rank=same; 0 [group=a style = invis]; 01 [style = invis]; 02 [group=b style=invis]; 0 -> 01 -> 02; } subgraph clusterA { "0A" [group=a] "0A" -> "1A" -> "2A"; "2A" -> "0A" [label=".", constraint=false, style=solid]; label="A"; } subgraph clusterB { "0B" -> "1B" -> "2B"; "2B" -> "0B" [label=".", constraint=false, style=solid]; label="B"; } subgraph clusterC { "0C" [group=b] "1C" [group=b] "0C" -> "1C" -> "2C"; "2C" -> "0C" [label=".", constraint=false, style=solid]; label="C"; } 0 -> "0A"[style=solid]; 01 -> "0B"[style=invis]; 02 -> "0C"[style=invis]; // edges between clusters edge[constraint=false, style=solid]; "0A" -> "1B" [label=a] "1A" -> "2B" [label=a] "0B" -> "1C" [label=b] "1B" -> "2C" [label=b] }