【问题标题】:How to format edge labels in Graphviz?如何在 Graphviz 中格式化边缘标签?
【发布时间】:2021-02-10 03:53:31
【问题描述】:

我创建了一个graphviz 图来可视化决策树。现在我想在所有边的图形上添加标签(例如TrueFalse)。

我使用正则表达式来操作.dot 文件,手动添加标签TrueFalse。产生以下文件

digraph Tree {
node [shape=box, style="rounded", color="black", fontname=helvetica] ;
edge [fontname=helvetica] ;
0 [label="s5 smaller
or equal to 0.0"] ;
1 [label="bmi smaller
or equal to 0.0"] ;
0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
3 [label="value = 110.6"] ;
1 -> 3 [headlabel="True"] ;
4 [label="value = 161.0"] ;
1 -> 4 [headlabel="False"] ;
2 [label="bmi smaller
or equal to 0.0"] ;
0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
5 [label="value = 174.0"] ;
2 -> 5 [headlabel="True"] ;
6 [label="value = 237.7"] ;
2 -> 6 [headlabel="False"] ;
}

这会产生以下情节:

但是,标签没有很好地排列(箭头切断了标签),我想相应地格式化文本。有没有办法在graphviz 的地块中做到这一点? 谢谢!

【问题讨论】:

    标签: python-3.x plot graphviz dot


    【解决方案1】:

    [更完整(和混乱)的答案]
    有多个级别的标签格式:

    • 您可以插入空格来影响 X 位置
    • 您可以插入实际的换行符或 \n 来影响 Y 位置
    • 您可以使用 \l\r 强制左对齐或右对齐
    • 您可以使用(伪)HTML 字符串来添加更多格式组合
    • 或者您可以通过设置或修改节点或边的 lp 属性来显式设置 X 和 Y 位置。

    见:

    用于显式定位

    例子:

    digraph labels {
      a [label=a]
      b [label="b\n\n\n"]
      c [label="       c"]
      d [label="d\n\nD"]
      e [label=<<B>e</B>>]
      f
      r [label=<<table><tr><td>r</td></tr></table>>]
      s
      
      a->b [label=a123]
      b->c [label="b123\n\n\n b321"]
      c->d [label="       c123"]
      d->e [label=" d123\n\nD123"]
      e->f [label=<<I>  e123</I>>]
    
      r->s [label=<<table><tr><td>r123</td><td>6</td></tr><tr><td></td><td>r321</td></tr></table>>]
    }
    

    【讨论】:

      【解决方案2】:

      您可以通过在标签文本中添加空格来优化标签放置,如下所示:

      digraph Tree {
      node [shape=box, style="rounded", color="black", fontname=helvetica] ;
      edge [fontname=helvetica] ;
      0 [label="s5 smaller
      or equal to 0.0"] ;
      1 [label="bmi smaller
      or equal to 0.0"] ;
      0 -> 1 [labeldistance=2.5, labelangle=45, headlabel="True"] ;
      3 [label="value = 110.6"] ;
      1 -> 3 [headlabel="True  "] ;
      4 [label="value = 161.0"] ;
      1 -> 4 [headlabel="False  "] ;
      2 [label="bmi smaller
      or equal to 0.0"] ;
      0 -> 2 [labeldistance=2.5, labelangle=-45, headlabel="False"] ;
      5 [label="value = 174.0"] ;
      2 -> 5 [headlabel="True  "] ;
      6 [label="value = 237.7"] ;
      2 -> 6 [headlabel="False    "] ;
      }
      

      捐赠:

      【讨论】:

      • 感谢您的回答!这意味着并不真正支持格式化标签。例如,我无法在 y 方向移动标签?
      猜你喜欢
      • 2010-10-24
      • 2023-03-22
      • 2010-12-20
      • 2017-06-17
      • 2019-06-19
      • 2012-09-05
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多