有没有一种方法可以在同一群集中的节点之间使用不同的边样条线,而不是在不同的群集中使用FDP布局? [英] Is there a way to have different edge splines between nodes in the same cluster vs between nodes in different clusters using fdp layout in graphviz?

查看:5
本文介绍了有没有一种方法可以在同一群集中的节点之间使用不同的边样条线,而不是在不同的群集中使用FDP布局?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建一个具有多个簇的图。在属于同一集群的节点之间有边,在属于不同集群的节点之间有边。我正在使用fdp布局。是否有办法为群集中的节点提供一种类型的边缘路由,并为属于不同群集的节点提供另一种类型的边缘路由?

例如,我想为前者使用splines=ortho,为后者使用splines=compound。我尝试过这样做,但似乎生成的图形只使用了主图形中指定的splines值。

推荐答案

我非常确定这不是一遍就能完成的--样条线是图形级属性。然而,我认为这可以用5遍技术来完成:

  1. 编辑输入文件
  • 移动集群内的所有集群内边缘
  • 在每个簇的开头添加边[Keep=1]
  1. 运行fdp-tdot-gplines=oreo(适用于所有)以添加节点和边缘路由
  2. 通过gvpr(或python?)运行步骤1输出收件人
  • 将所有节点节点[pin=true]固定在图形的开头
  • 对于Keep==1的每条边,将位置属性复制到(新建)属性
  1. 通过fdp-s-TDOT-G样条线=复合运行步骤2输出-这将覆盖所有边位置值
  2. 通过gvpr(或python?)运行步骤3输出将位置替换为保持位置(如果保持位置!=&q;&q;)
  3. 通过neato-s-n2-tsvg/png/...运行步骤4输出

哇!听起来很恶心,但似乎很管用
附:第3步和第5步需要-s选项以修复伸缩问题
附注:由于需要固定节点,fdpneato(不是)

以下是命令行:

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

这篇关于有没有一种方法可以在同一群集中的节点之间使用不同的边样条线,而不是在不同的群集中使用FDP布局?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆