Graphviz: 将边标签放在另一侧 (II)

26
1个回答

30

正如您所发现的那样,graphviz不允许您选择水平标签位置,因此所有解决方案都略有些技巧。

尝试 #1: marapet发布的两个解决方案(在这里)

  1. labelangle和labeldistance的技巧不能很好地适应不同长度的标签文本(您必须重新计算新的距离/角度数)。

  2. splines=false的技巧在节点之间的边数>节点数时效果不佳(您最终会得到重叠的边)。

尝试 #2: 使用xlabels和anchors创建曲线边缘

这使用了graphviz的一个相对较新的功能,xlabel(它在决定节点/边缘的坐标之后放置标签)。 ports特性用于创建曲线边缘。标签上的填充通过空格字符实现。

gv

digraph {
forcelabels=true;

    0:sw -> 1:nw [ dir=forward, xlabel="  (1, 0)  "];
    0 -> 1 [dir=none];
    1:ne -> 0:se [ dir=backward, xlabel= "  (0, -1)  "];

}

我相信您需要使用版本大于2.29的Graphviz才能使用xlabel。

1
在我的点版本(2.40)中,似乎不再可以使用空格来控制标签位置。 - N. Virgo
1
@Nathaniel,如果有帮助的话,尝试在前面或后面添加一些几乎看不见的字符,比如点(.)或Unicode表中的其他字符。这样可能会被布局引擎识别为一个包含空格的字符:xlabel=". mytext"xlabel="mytext ." - AlexGrafe

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