【问题标题】:Display labels in line with the edge when using Graphviz使用 Graphviz 时显示与边缘对齐的标签
【发布时间】:2013-05-12 23:46:42
【问题描述】:

我正在使用 Graphviz 2.30。标签的水平定位可行,但在少数情况下,需要修改角度。

例如,我在这里尝试了各种角度值,但没有任何效果:

ABB -> ABACUS[label="applied", fontname="Arial", fontsize=15, labelangle=110];

当使用 Graphviz digraph 时,如何显示与边缘一致(即平行)的标签。

由于保密协议,整个digraph 将不会发布。此外,旋转只会应用于少数标签。

我已经阅读过类似的主题,例如 thisanother(或关于对齐的主题),但对我的问题没有任何帮助。

【问题讨论】:

  • 'labelangle' 仅适用于 headlabels 和 taillabels,而且它不旋转标签,而仅定义(与 labeldistance 一起)放置标签的位置(仍然是一条水平线)。角度 0 从沿边缘的起点/终点开始。带角度+/-标签可以在边缘上方或下方打印。距离为 0 时,角度无效。我也对让标签旋转以跟随边缘非常感兴趣,这仍然没有解决。
  • 我感觉没有办法做到这一点。但是由于很少记录缺少功能(这将导致无限量的文档),因此很难就此写出权威的答案。除非你能指出在整个文档中都没有提到这样的事情,在代码库的任何晦涩的角落里也没有提到。
  • Graphviz 中的文本元素在定位时都被一个正则框包围。该算法非常努力地避免在边缘放置期间越过这些框边界。如果标签可以旋转,这些框会变得更大,从而对显示区域造成巨大压力。如果标签可以重叠边缘或节点,那么它们可以稍后在成像管道中旋转。
  • 其实你可以在文档中找到它:github.com/ellson/graphviz/blob/master/doc/internal_todo.html "? - Allow text at a angle"

标签: graphviz labels


【解决方案1】:

使用dot2latex 允许您指定lblstyle 属性。 lblstyle 的值被PGF/TikZ 在pdf 生成中使用。

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

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

结果是

【讨论】:

  • 不幸的是,您在生成图表时必须知道所有标签的角度; OP 希望以与边缘平行的角度显示其标签。
  • @Galax 感谢您的评论。我确定了答案。
  • 很棒的发现 - 这是dot 的一个方便的功能,我以前没有注意到它(或者它可能是新的)。
【解决方案2】:

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

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

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

【讨论】:

猜你喜欢
  • 2020-02-09
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2017-06-17
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多