GraphViz: ¿Cómo representar un gráfico con ciertos puntos de conexión de borde de nodo?

StackOverflow https://stackoverflow.com/questions/8318253

  •  25-10-2019
  •  | 
  •  

Pregunta

Quiero renderizar un gráfico en un diseño similar al siguiente:

wanted

Intenté esto:

digraph EDP
{
  graph [colorscheme=paired12];
  node [label="\N", shape=box, style="rounded,filled", colorscheme=paired12, color=8, fillcolor=7, width="1.2", fontname="Arial narrow", fontsize=12];
  edge [colorscheme=paired12, color=8, fontsize=11, fontname="Arial narrow"];

  src [label="Source"];
  dst [label="Destination"];
  filter [label="Filter"];

  src -> dst [label="Encoding process"];
  src -> filter [label="a"];
  filter -> dst [label="b"];
  src -> filter [dir=back, label=c];
  filter -> dst [dir=back, label=d];
  src -> dst [dir=back, label="Decoding process"];

}

que generó el siguiente resultado :( no muy agradable ...

my

¿Alguien puede mostrarme la solución más cercana posible? (Probablemente no sea posible hacer exactamente lo mismo)

¿Fue útil?

Solución

Lo más cerca que me puse antes de llamarlo una noche:

digraph EDP
{
  graph [colorscheme=paired12];

  node [label="\N", shape=box, style="rounded,filled", colorscheme=paired12, color=8, fillcolor=7, width="1.2", fontname="Arial narrow", fontsize=12];
  edge [colorscheme=paired12, color=8, fontsize=11, fontname="Arial narrow"];

  src [width=3.5, label="Source"];
  dst [width=3.5, label="Destination"];
  filter [label="Filter"];

  edge[constraint=false];
  src -> dst [label="Encoding\nprocess"];
  src -> filter [label="a"];
  filter -> dst [label="b"];
  dst -> filter [label="c"];
  filter -> src [label="d"];
  dst -> src [label="Decoding\nprocess"];

  edge[style=invis, constraint=true];
  src->filter->dst;

}

Guarde el gráfico como edp.gv y crea la imagen con

dot -Gsplines=none edp.gv | neato -n -Gsplines=ortho -Tpng -o edp.png

Resultado:

closest possible graphviz output

Algunos comentarios:

  • Terminé poniendo constraint=false en todos los bordes, y agregue bordes invisibles para centrarse los tres nodos
  • Normalmente me gusta usar dir=back, pero no pude usar esto al renderizar con -Gsplines=ortho
  • Como puede ver, el orden de los bordes es aleatorio ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top