我正在尝试显示“圆柱形”的双音节字母组合(从左到右的格式),以便它们可以绘制在圆柱上。这些图形由连续的节点列组成。右侧的节点列(用虚线表示)是左侧节点列的替代品,以便该图形可以打印出来,卷成圆柱形,并且将虚线节点与第一列节点完全对齐,在圆柱上显示一个连续的环形图。
我已经成功地使用“rank”来获取列节点的对齐方式,并使用“group”来建议第一列和最后一列之间的水平节点对齐方式。(此链接:Graphviz Dot vertical alignment of nodes 尤其有帮助。) 问题是,我不想让第一列和最后一列的节点垂直散开(见图片);与任何其他节点列中的节点之间相比,第一列的节点(最后一列节点同理)之间不应有更多的垂直间隔。但是,各自的第一列/最后一列节点必须保持水平对齐。 (我想它试图通过中间节点将节点对1->15和13->16之间的水平无形边缘保留不被阻挡;但我不需要它们不被阻挡。节点1和13(以及15和16)应该与节点5和14之间的垂直间隔大致相同。)
TL;DR版本:问题是第一列和最后一列的节点不能竖直分开,但要求保持水平对齐。
我已经成功地使用“rank”来获取列节点的对齐方式,并使用“group”来建议第一列和最后一列之间的水平节点对齐方式。(此链接:Graphviz Dot vertical alignment of nodes 尤其有帮助。) 问题是,我不想让第一列和最后一列的节点垂直散开(见图片);与任何其他节点列中的节点之间相比,第一列的节点(最后一列节点同理)之间不应有更多的垂直间隔。但是,各自的第一列/最后一列节点必须保持水平对齐。 (我想它试图通过中间节点将节点对1->15和13->16之间的水平无形边缘保留不被阻挡;但我不需要它们不被阻挡。节点1和13(以及15和16)应该与节点5和14之间的垂直间隔大致相同。)
TL;DR版本:问题是第一列和最后一列的节点不能竖直分开,但要求保持水平对齐。
- 图表从左到右“流动”,以一系列“节点列”的顺序排列(值得一提的是,所有边缘都指向右侧,并且始终仅向前移动一步,从第j列到第j+1列)。
- 最右侧的列需要是左侧列的“重复”(反映了圆柱形环绕),它应该看起来像是左侧列的复制粘贴,在相同的垂直高度处。
- 这也适用于更复杂的图表(例如this one; 左侧和右侧列的节点相当对齐,但我担心离群值),并且必须来自自动化过程(无需手工微调)。
digraph {
node[label=""];
rankdir="LR"
1->8[label="c"]
13->8[label="a"]
8->12[label="b"]
12->10[label="a"]
10->5[label="a"]
10->14[label="b"]
5->2[label="a"]
5->9[label="b"]
14->9[label="a"]
2->4[label="b"]
9->4[label="a"]
// "wraparound" nodes
node[label="", style="dashed"];
4->15[label="a"] // since "a" connected 4 to 1, 15 must be in the same group as 1 (subs for 1)
node[label="", style="dashed"];
4->16[label="c"]
{rank=same; 1[group=g1]; 13[group=g2]}
{rank=same; 8}
{rank=same; 12}
{rank=same; 10}
{rank=same; 5, 14}
{rank=same; 2, 9}
{rank=same; 4}
// new nodes also need to have same rank; groups should pair corresponding nodes, w/ correct edge letter
{rank=same; 15[group=g1]; 16[group=g2]}
edge[style=invis];
1->15
13->16
}