默认情况下,在Graphviz中,边缘标签放置在边缘的右侧。我正在寻找一种将标签放置在边缘上方且居中的方法。(因为我正在更改边缘的颜色,所以标签仍然可读)。
有什么想法吗?
labeldistance
设置为零,强制在边缘上绘制标签。但据我所知,你指的是边缘标签(位于边缘中间的标签)。文档非常明确地说明labeldistance
仅影响头部和尾部标签,但你可以试一试。考虑在标签后添加一些空格。这样,您就可以避免与边缘箭头重叠,因为graphviz标签是右对齐的。这不是一个优雅的解决方案,我很想看到一个合适的标签对齐,但它可能会解决您的问题。
根据前两个答案,以下是我的解决方案:使用taillabel
/labeldistance
,透明边缘和空白间隔。
如果两个节点之间只有一条边,请使用透明边缘。下面是一个示例及其结果。
digraph G {
rankdir=BT;
A -> B [label=" ", minlen=3, headlabel="A overlay text\non edge", labeldistance=8];
B -> A [color=white];
}
如果两个节点之间有两条边,不需要使用透明的边缘,只需使用空白间隔来调整它们的相对位置,并使文本真正地覆盖在边缘上方。digraph G {
rankdir=BT;
A -> B [label=" ", minlen=3, headlabel="An overlay\ntext", labeldistance=6];
B -> A [headlabel=" B to A", labeldistance=4];
}
这是最近在Graphviz论坛(https://forum.graphviz.org/t/fun-with-edge-labels/1643)上讨论的(由我提出的)。 讨论中包含了一个使用gvpr编写的后处理器的链接(https://www.graphviz.org/pdf/gvpr.1.pdf)(Graphviz系统的一部分),该后处理器可以让用户重新定位边标签,包括放置在边的上方。
以下是输入dot程序和结果的示例。 请注意,在许多情况下,标签放置故意不居中。
这不是通用解决方案,但在许多情况下很有用。
graph straight {
splines=false
edge [label="\T" labelOverlay=true color=purple]
node [shape=rect style=filled fillcolor=lightblue]
a1 -- b1
c1 -- d1 [labelOverlay="15%" label=high]
e1 -- f1 [label2node=true labelOverlay="75%" label=low]
g1:sw -- h1:nw
g1:s -- h1:n [labelOverlay="20%"]
g1:se -- h1:ne
j1 -- k1 [ label2node=true]
node[shape=square style=filled fillcolor=lightgreen]
{rank=sink
edge [fontcolor=red]
Aaa -- B3 [labelOverlay="33%"]
C98 -- D3 [labelOverlay="80%" label2node=true]
Eee -- F6 [label="adjust me" labelAdjust="45,-25"]
G12 -- H3 [label2node=true]
node [shape=plain fontcolor=blue style=""]
Lxx -- M123
Noo -- Ooo [label2node=true]
node [shape=oval fontcolor=blue style=""]
P -- Q
}
node[shape=circle style=filled fillcolor=pink]
edge [label2node=true label="aeiou" labelOverlay="78%"]
10 -- {11 12}
10 -- 13 [labelOverlay="38%"]
10 -- 14 [labelOverlay="62%"]
edge [label="three"]
node [shape=Mrecord]
13 -- 21
edge [labelOverlay="55%" label="T\nh\nr\ne\ne\n \n33"] 13 -- 22
edge [labelOverlay="60%"] 13 -- 23
}