【发布时间】:2020-07-02 00:07:59
【问题描述】:
我正在创建一个包含多个集群的图表。属于同一个簇的节点之间有边,属于不同簇的节点之间有边。我正在使用fdp 布局。有没有办法让集群内的节点使用一种类型的边缘路由,而属于不同集群的节点使用另一种类型的边缘路由?
例如,我想将splines=ortho 用于前者,将splines=compound 用于后者。我尝试这样做,但生成的图表似乎只使用主图表中指定的splines 值。
【问题讨论】:
我正在创建一个包含多个集群的图表。属于同一个簇的节点之间有边,属于不同簇的节点之间有边。我正在使用fdp 布局。有没有办法让集群内的节点使用一种类型的边缘路由,而属于不同集群的节点使用另一种类型的边缘路由?
例如,我想将splines=ortho 用于前者,将splines=compound 用于后者。我尝试这样做,但生成的图表似乎只使用主图表中指定的splines 值。
【问题讨论】:
我很确定它不能单次通过 - 样条线 是图形级属性。但是我认为它可以通过 5-pass 技术来完成:
哇!听起来很恶心,但它似乎工作
p.s.第 3 步和第 5 步需要使用 -s 选项来解决缩放问题
pps因为需要固定节点,所以只有 fdp 和 neato(不是 dot)
这是一个命令行:
f=multispline.gv;
F=`basename $f .gv`
fdp -Gsplines=true -Tdot $f |
gvpr -c 'N{pin="true"}E[keep=="1"]{keeppos=$.pos}'|
fdp -s -Gsplines=ortho -Tdot |
gvpr -c 'E[keeppos!=""]{pos=keeppos}' |
neato -s -n2 -Tsvg >oo.svg
【讨论】: