Graphviz中的简单线性排列

7

我希望生成像这样的简单线性排列:

graph I'd love to recreate with graphviz

我觉得我做得太复杂了。我尝试过硬编码位置,但这有点更加复杂,因为我想要平滑的边缘。

我不特别关心边缘是在上面还是在下面,但指定这一点将是一个不错的功能。

2个回答

8

这是一个人们可能认为使用Graphviz很简单的事情,但实际上并不是。

Graphviz旨在最小化边的交叉,因此它永远不会像那些图片一样布置边缘。这不是Graphviz的初衷。

但我同意,有一个关闭边缘优化的选项会很好。

你可以创建类似于这样的东西:

rankdir=LR;
ranksep=0;
edge[style=invis];
node[shape=none, width=0.3, height=0, margin=0.02];
4->7->5->1->8->3->6->2;

edge[style=solid, constraint=false];
1:s->2:s->3:s->4:s->5:s->6:s->7:s->8:s

导致

graphviz输出

一旦您开始使用北向和南向端口,graphviz将尝试最小化边的交叉并引导节点之间的某些边:

rankdir=LR;
ranksep=0.05;
edge[style=invis];
node[shape=none, width=0.3, height=0, fontsize=12, margin=0.02];
4->7->5->1->8->3->6->2;

edge[style=solid, weight=0];
1:n->2:n;
2:s->3:s->4:s;
4:n->5:n->6:n;
6:s->7:s;
7:n->8:n;

另一个Graphviz输出

如果有更好的近似方法,请发表,我会感兴趣的。


0
让我建议使用IPE。这是一个在LateX之上工作的图形编辑器,也就是说,你所绘制的一切都由你选择的某个LaTeX引擎渲染(默认为pdflatex)。这是免费软件。
安装完成后,你可以使用我为该程序制作的插件之一,我称之为ipe.embedviz。通过输入排列,你可以绘制图形的线性布局(以边的列表形式指定)。你还可以绘制圆形和二分嵌入(请查看维基here)。按照github存储库中的自述文件中的说明进行安装。
在使用ipelet绘制所需内容后,你可以随意编辑结果。绘图可以保存为PDF文件,并可在任何LaTeX文档中使用\includegraphics{}命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接