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

Graphviz:将边缘标签放置在另一侧(II),graphviz,Graphviz,有关问题包括: 考虑以下点文件: digraph { 0 -> 1 [ len=2, label="(1, 0)"]; 0 -> 1 [ len=0.5, dir=none, weight=10]; 1 -> 0 [ len=2, label="(0, -1)"]; } 给出以下结果: 如何获得对称版本(0,-1)应该位于右侧egde的左侧。正如您所发现的,graphviz不允许您选择水平标签放置,因此所有解决方案都有点粗糙 尝试#1:marapet()发布的两个解决方

有关问题包括:

考虑以下点文件:

digraph {
0 -> 1 [ len=2, label="(1, 0)"];
0 -> 1 [ len=0.5, dir=none, weight=10];
1 -> 0 [ len=2, label="(0, -1)"];
}
给出以下结果:


如何获得对称版本<代码>(0,-1)应该位于右侧egde的左侧。

正如您所发现的,graphviz不允许您选择水平标签放置,因此所有解决方案都有点粗糙

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

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

  • 样条线=假技巧在 节点之间的边>节点数(以 重叠边)

  • 尝试#2:xlabel和锚点创建弯曲边缘

    这使用了相对较新的graphviz功能(该功能将标签放置在节点/边的坐标确定之后)。该特征用于创建曲线边。标签上的填充是通过空格字符实现的

    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)  "];
    
    }
    


    我相信您需要graphviz version>2.29来使用xlabel。

    在我的dot(2.40)版本中,似乎不再可能使用空格来控制标签位置。@Nathaniel,以防它帮助您尝试预加/附加一些几乎看不见的字符,如点(
    )或Unicode表中的其他字符。这可能会注册为布局引擎将使用的字符,包括空格:
    xlabel=“.mytext”
    xlabel=“mytext.”