graphviz,理顺skiplist?
graphviz, straighten out skiplist?
我做了一个二合图来绘制跳表,效果还不错,但是对齐方式有待改进。
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
}
这会产生:
我想制作更像这样的东西:
如何使边缘笔直?以及如何将节点对齐到同一基线上?
您需要调整每个节点的高度。这是我到目前为止所做的,接近了,但您可能想要进一步改进:
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
}
产量
对于这个图表,所有需要做的就是将这个添加到图表中:
nodesep=0
(您还可以删除 weight
属性)
nodesep
: specifies the minimum space between two adjacent nodes
in the same rank
我想象它的工作方式是 nodesep 在节点的两侧添加一些填充。如果附近有边,节点将移动以遵守填充。
我做了一个二合图来绘制跳表,效果还不错,但是对齐方式有待改进。
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
}
这会产生:
我想制作更像这样的东西:
如何使边缘笔直?以及如何将节点对齐到同一基线上?
您需要调整每个节点的高度。这是我到目前为止所做的,接近了,但您可能想要进一步改进:
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
}
产量
对于这个图表,所有需要做的就是将这个添加到图表中:
nodesep=0
(您还可以删除 weight
属性)
nodesep
: specifies the minimum space between two adjacent nodes in the same rank
我想象它的工作方式是 nodesep 在节点的两侧添加一些填充。如果附近有边,节点将移动以遵守填充。