5

我想在 Graphviz 中生成以下图表:

所需布局

由于此处解释的原因,这是:

digraph
{
   layout=dot;
   rankdir="LR";
   overlap = true;
   node[shape=record, height="0.4", width="0.4"];
   edge[dir=none];

   A; B; C; D; E; F; G; H; I;

   A -> B -> C;
   D -> E -> F;
   G -> H -> I;
   edge[constraint=false];
   A -> D -> G;

   subgraph clusterX
   {
      label="Cluster 1";
      A; B;
   }

   subgraph clusterY
   {
      label="Cluster 2";
      E; F; H; I;
   }

}

产生这个:

不需要的布局

仔细调整节点的出现顺序之后

   F; E; I; H; D; G; A; B; C;

我得到正确的结果。

虽然这可行,但我希望更直接地控制节点的位置,所以我尝试切换到neato,以便我可以使用 pos 强制节点位置:

graph g
{
   layout=neato;
   node[shape=record, height="0.4", width="0.4"];
   edge[dir=none];

   A [pos="1,3!"];
   B [pos="2,3!"];
   C [pos="3,3!"];
   D [pos="1,2!"];
   E [pos="2,2!"];
   F [pos="3,2!"];
   G [pos="1,1!"];
   H [pos="2,1!"];
   I [pos="3,1!"];

   A -- B -- C;
   D -- E -- F;
   G -- H -- I;
   A -- D -- G;

   subgraph clusterX
   {
      label="Cluster 1";
      A;
      B;
   }

   subgraph clusterY
   {
      label="Cluster 2";
      E; F; H; I;
   }
}

这给出了以下结果:

在此处输入图像描述

我怎样才能让neato在集群边界和集群内的节点之间添加填充(以与dot相同的方式)?

4

2 回答 2

4

我讨厌成为派对的垃圾,但我不认为有固定位置和集群的整洁方法会成功。

集群支持取决于布局引擎 -并非所有引擎都以相同的程度支持它

请注意,无论好坏,簇子图都不是 DOT 语言的一部分,而只是某些布局引擎所遵循的语法约定。

Neato似乎不是支持集群的引擎的一部分,虽然fdp支持类似neato的布局,但不支持固定位置

在上面链接的论坛条目中,ERG 建议在某些时候使用gvpr脚本来实现这一点 - 可能不是您想到的解决方案。

顺便说一句,该图不应该是有向图,我收到警告并全部替换->--.

于 2012-03-27T19:28:04.483 回答
0

在每个集群周围添加一个周围的集群,将其样式设置为“invis”,并将其边距设置为集群之间所需的额外空间。你的点文件如下:

digraph
{
   layout=dot;
   rankdir="LR";
   overlap = true;
   node[shape=record, height="0.4", width="0.4"];
   edge[dir=none];

   A; B; C; D; E; F; G; H; I;

   A -> B -> C;
   D -> E -> F;
   G -> H -> I;
   edge[constraint=false];
   A -> D -> G;

   subgraph clusterX_margin
   {
     style=invis
     margin=20.0
     subgraph clusterX
     {
        label="Cluster 1";
        A; B;
     }
   }

   subgraph clusterY_margin
   {
     style=invis
     margin=20.0
     subgraph clusterY
     {
        label="Cluster 2";
        E; F; H; I;
     }
   }
}
于 2021-07-23T08:12:26.617 回答