graphviz,整理出跳跃列表?

时间:2018-06-20 21:25:39

标签: graphviz

我制作了一个有向图,以绘制一个跳过列表,虽然效果很好,但是对齐方式需要改进。

digraph {
  rankdir=LR
  node [shape=record,weight=4]
  edge [weight=10000]

  X [label="<f0>•|<f1>•|<f2>•|<f3>•|<f4>Head"]
  A [label="<f3>•|<f4>4"]
  B [label="<f1>•|<f2>•|<f3>•|<f4>8"]
  C [label="<f3>•|<f4>15"]
  D [label="<f0>•|<f1>•|<f2>•|<f3>•|<f4>16"]
  E [label="<f2>•|<f3>•|<f4>23"]
  F [label="<f2>•|<f3>•|<f4>42"]
  Y [label="<f0>•|<f1>•|<f2>•|<f3>•|<f4>Tail"]

  X:f0 -> D:f0
  X:f1 -> B:f1
  X:f2 -> B:f2
  X:f3 -> A:f3
  X:f4 -> A:f4

  A:f3 -> B:f3
  A:f4 -> B:f4

  B:f1 -> D:f1
  B:f2 -> D:f2
  B:f3 -> C:f3
  B:f4 -> C:f4

  C:f3 -> D:f3
  C:f4 -> D:f4

  D:f0 -> Y:f0
  D:f1 -> Y:f1
  D:f2 -> E:f2
  D:f3 -> E:f3
  D:f4 -> E:f4

  E:f3 -> F:f3
  E:f4 -> F:f4

  F:f2 -> Y:f2
  F:f3 -> Y:f3
  F:f4 -> Y:f4
}

这将产生:enter image description here

我想产生更多这样的东西:enter image description here

如何使边缘笔直?以及如何将所有节点对齐在同一基线上?

2 个答案:

答案 0 :(得分:2)

对于此图,所有要做的就是将其添加到图中:

nodesep=0

(然后您也可以删除weight属性)

  

nodesep:指定两个相邻节点之间的最小间距   在同一等级

我想像的是,nodesep在节点的侧面增加了一些填充。如果有附近的边缘,则将移动该节点以遵守填充。

答案 1 :(得分:0)

您将需要处理每个单独节点的高度。到目前为止,这是我已经完成的工作,但您可能需要进一步改进:

digraph so
{
  splines = line;
  rankdir = LR;
  node [ shape = record ];
  edge[ minlen = 2 ];

  X [label="<f0>•|<f1>•|<f2>•|<f3>•|<f4>Head", height = 5.5 ]
  A [label="<f3>•|<f4>4", height = 2.25 ]
  B [label="<f1>•|<f2>•|<f3>•|<f4>8", height = 4.5 ]
  C [label="<f3>•|<f4>15", height = 2.25 ]
  D [label="<f0>•|<f1>•|<f2>•|<f3>•|<f4>16", height = 5.5 ]
  E [label="<f2>•|<f3>•|<f4>23", height = 3.25 ]
  F [label="<f2>•|<f3>•|<f4>42", height = 3.25 ]
  Y [label="<f0>•|<f1>•|<f2>•|<f3>•|<f4>Tail", height = 5.5 ]

  X:f0 -> D:f0
  X:f1 -> B:f1
  X:f2 -> B:f2
  X:f3 -> A:f3:w
  X:f4 -> A:f4

  A:f3 -> B:f3
  A:f4 -> B:f4

  B:f1 -> D:f1
  B:f2 -> D:f2
  B:f3 -> C:f3
  B:f4 -> C:f4

  C:f3:e -> D:f3
  C:f4 -> D:f4

  D:f0 -> Y:f0
  D:f1 -> Y:f1
  D:f2 -> E:f2
  D:f3 -> E:f3
  D:f4 -> E:f4

  E:f3 -> F:f3
  E:f4 -> F:f4

  F:f2 -> Y:f2
  F:f3 -> Y:f3
  F:f4 -> Y:f4
}

收益

enter image description here