【问题标题】:unable to print the label and outline box of a cluster subgraph in graphviz无法在graphviz中打印集群子图的标签和轮廓框
【发布时间】:2012-09-23 20:00:40
【问题描述】:

我是 graphviz 和 DOT 语言的新手。我正在尝试使用集群 subgprahs 生成图表。但是,当我有集群时,每个集群都在脚本中精确指定了节点位置,graphviz 不会生成集群的轮廓框或标签! 具体来说,如果我有以下 DOT 脚本:

digraph G{
subgraph cluster0{
label="Cluster 0"
a->b
}
subgraph cluster1{
label="Cluster 1"
c->d
}
}

那么生成的图形是:

但是,使用以下 DOT 脚本,我在其中准确指定了 4 个节点的节点位置:

digraph G{
subgraph cluster0{
label = "Cluster 0"
a[pos="10,200"]
b[pos="100,200"]
a->b
}
subgraph cluster1{
label = "Cluster 1"
c[pos="10,100"]
d[pos="100,100"]
c->d
}
}

生成的图表是:

请注意,在这种情况下,集群的轮廓框和集群的标签都不会打印!在这种情况下,如您所见,两个集群之间有明显的分界线 - 集群不重叠,所以原则上 graphviz 显示它们应该没有问题,对吗?

无论如何,我如何告诉 graphviz 绘制集群轮廓框和标签? 对此的任何帮助将不胜感激!

谢谢!

【问题讨论】:

  • 它对我有用。你用的是什么版本的点?您使用什么命令进行转换?
  • 我的 dot 版本:dot - graphviz 版本 2.28.0 (20120313.1216)。我用于创建图形的命令:dot -Tpdf -O filename.dot
  • 您确定它会为您产生预期的输出吗?如在给定 pos 值的情况下,节点的排列是否符合预期?你能显示你得到的输出吗……那真的很有帮助!谢谢!
  • 这里是 pdf 文件:filedropper.com/trialdot 我使用的源与你的非工作案例完全相同。
  • 刚刚看到您的 pdf...如您所见,当您考虑到节点的相对位置类型时,这不是预期的输出,因为我希望使用 pos 值。这正是我得到的输出,也与我的问题中的第一个代码片段产生的输出相同(即,节点没有任何 pos 值),但我想要的是集群问题中的第二张图片标题等

标签: graph graphviz dot graph-visualization


【解决方案1】:

点布局引擎不支持pos 属性。

要呈现预定义所有节点位置的图形,您应该使用neatofdp-n 选项。

neato 不支持集群(尽管它是seems it should now)。幸运的是,fdp做到了!

因此,您可以使用以下命令:

dot -Tpdf -Kpdf -n -O filename.dot

fdp -Tpdf -n -O filename.dot

不幸的是,节点相对于集群的位置还可以,但集群似乎仍然被 fdp 移动(-n 开关没有影响)。

我没有尝试使用最新版本(我使用的是 2.29.20120504),但如果最新版本也不起作用,这可能是错误报告的情况。

顺便说一句,由于假定位置以英寸为单位,这将创建一个非常大的图表。


我使用 fdp 得到的输出(带或不带 -n 开关) - 我添加了 size=20 以限制图像大小:


不使用pos的替代解决方案:

digraph G{
subgraph cluster0{
label = "Cluster 0"
{rank=same; a->b;}
}
subgraph cluster1{
label = "Cluster 1"
{rank=same; c->d; }
}

a -> c [style=invis];
}

【讨论】:

  • 我尝试使用 fdp 布局引擎,它提供与 dot 相同的输出。当您运行我的问题中的第二段代码时,您是否也使用 fdp 获得相同的输出?
  • 我将输出添加到我的答案中,大大调整了大小。
  • 是的,我终于得到了这个输出,但是,集群被移动了,你也注意到了。我找不到任何方法来处理这个问题。如果我只希望出现集群标签并且不太关心这些框,是否有某种方法可以在图表中的特定位置打印一些标签文本 - 即在集群的标题处,通常由点打印还是 fdp?
  • 我添加了一个解决方案来实现使用不可见边缘而不是固定位置的布局。
  • 太好了,谢谢!我之所以选择预定义位置是因为在我想要的图形布局中(对于更大的图形),一些节点需要重叠......直到现在,拥有固定节点位置是我认为我可以实现的唯一方法.有没有其他方法可以使用 fdp 或neato 来做到这一点?非常感谢!!
【解决方案2】:

您的代码在 viz.js 的 svg 中呈现良好。我能够看到集群周围的边界。

也许您使用的 graphviz 版本较旧,升级应该可以解决此问题。

【讨论】:

    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多