【问题标题】:How to represent node weight in GraphViz?如何在 GraphViz 中表示节点权重?
【发布时间】:2017-12-23 08:23:13
【问题描述】:

在 GraphViz 中,边的宽度由 weight 属性表示。在某些图中,节点也可以具有权重,例如,在我的例子中,节点的权重表示聚合步骤后的内部边数。

不幸的是,节点没有weight 属性。节点确实具有width 属性,但这仅用于显示目的(具有以英寸为单位的固定语义)。

鉴于上述限制,在 GraphViz / DOT 语言中表示节点权重的最佳方式是什么?

【问题讨论】:

  • 您可以向节点添加任意属性,包括一个名为weight 的属性。但是,我假设您还希望 weight 更改图表的可视化方式。那会是什么?
  • @DiomidisSpinellis 我只考虑表示图形本身,而不是它的显示方式(尽管 DOT 通常用于这两种目的)。我认为应该将某物与它的显示方式严格分离。
  • 我完全同意解耦。根据您的说明查看我的答案。

标签: graphviz dot


【解决方案1】:

向节点添加weight 属性。然后,您可以使用基于weight 的gvpr 处理图形。例如,请考虑下图。

digraph weighted {
    a [weight = 5];
    b [weight = 2];
    c [weight = 12];
    d [weight = 7];

    a -> b -> c -> d;
}

您可以通过 gvpr 使用脚本对其节点进行着色,如下所示。

N [weight >= 5 ] {color="red"}
N [weight < 5] { color = "blue"}

使用此脚本处理图形,然后使用如下命令将结果传递给 dot

gvpr -c -f t.gvpr foo.dot | dot -Tpng -ocolored.png

将生成以下输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多