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