Graphviz: Как отображать график, касающийся определенных точек соединения с краями узла?
-
25-10-2019 - |
Вопрос
Я хочу отобразить график в аналогичном макете к следующему:
Я попробовал это:
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"];
}
который вызвал следующий результат :( не очень мило ...
Кто -нибудь может показать мне самое близкое решение? (Вероятно, это невозможно сделать точно так же)
Решение
Так близко, как я добрался до того, как назовут это ночью:
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;
}
Сохраните график как edp.gv
и создать изображение с
dot -Gsplines=none edp.gv | neato -n -Gsplines=ortho -Tpng -o edp.png
Результат:
Некоторые замечания:
- Я закончил тем, что положил
constraint=false
по всем краям и добавьте невидимые края, чтобы иметь три узла - Обычно мне нравится использовать
dir=back
, но я не мог использовать это при рендеринге с-Gsplines=ortho
- Как видите, порядок краев случайный ...
Не связан с StackOverflow