当使用Graphviz时,将标签显示在边缘上

94
我是使用Graphviz 2.30。标签的水平定位没问题,但在某些情况下,需要修改角度。
例如,在这里尝试了各种角度值,但没有任何效果:
ABB -> ABACUS[label="applied", fontname="Arial", fontsize=15, labelangle=110];

当使用Graphviz的digraph时,我该如何将标签与边缘平行显示?

由于NDA的原因,整个digraph将不会被发布。此外,旋转仅适用于少数标签。

我已经阅读了类似thisanother的帖子(或者关于对齐的帖子),但是没有任何有关我的问题的帮助。


2
'labelangle' 仅适用于 'headlabels' 和 'taillabels',此外它不旋转标签,而只定义(与 'labeldistance' 一起)标签放置的位置(仍然是水平线)。角度0是从开始/结束点沿着边缘的方向。使用角度+/ - 可以上下打印标签。距离为0时,角度无效。我非常有兴趣让标签旋转以跟随边缘,但据我所知这仍未解决。 - bug313
2
我开始觉得这似乎无法实现。但由于缺少功能通常没有记录(这将导致无限量的文档),因此很难撰写一个权威答案。除非你能指出整个文档中没有任何关于这样的提及,也没有在代码库的任何角落中找到它。 - bigblind
1
Graphviz中的文本元素在定位过程中都被限定在一个常规的矩形框内。算法非常努力地避免边界交叉,以便进行边缘定位。如果标签可以旋转,这些框将变得更大,从而对显示区域造成相当大的压力。如果标签可以与边缘或节点重叠,则它们可以在后续的图像处理流程中进行旋转。 - Pekka
1
实际上,您可以在文档中找到它:https://github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - 允许文本倾斜" - MK.
2个回答

7

使用 dot2latex 可以指定 lblstyle 属性。在 pdf 生成中,PGF/TikZ 会使用 lblstyle 的值。

可以像这样指定平行标签:

digraph G {
    edge [lblstyle="above, sloped"];
    a -> b [label="ab"];
    b -> c [label="bc"];
    c -> a [label="ca"];
}

生成PDF
$ dot2tex --tikzedgelabel file.dot > file.tex
$ pdflatex file.tex

结果是。

enter image description here


2
不幸的是,在生成图表时,您必须知道所有标签的角度;OP希望以与边缘平行的方式显示其标签,无论边缘的角度如何。 - Galax
2
@Galax 感谢您的评论。我已经修正了答案。 - malbarbo
1
太好了,dot的这个便利特性真是个好发现,我之前没注意到它(或者它是新功能)。 - Galax
非常好的回答,@malbarbo!非常感谢。 - undefined

0

编辑:另一个答案找到了一种现在可以将文本与边缘对齐的选项。

您最好的选择可能是将图形导出为SVG,然后使用IllustratorInkscape进行微调。这仅在生成少量图形时才实用。

我经常需要调整GraphvizGephi的输出;它们给了我一个很好的起点。


您甚至可以在Microsoft Office中编辑导出的SVG! - Leponzo

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