Graphviz中的聚类不会对称空间

时间:2015-05-05 21:27:38

标签: graphviz dot

我正在尝试在Graphviz中均匀地获取多个节点集群。

我认为图像最能说明我正在尝试做什么:

enter image description here

从图像中可以看出,第2层和第3层之间有额外的间距.2和3之间的空间应该与1和2之间的空间相同。

间距也需要超过3层。当我尝试超过3层时,第4层的间隔与第3层差。

这是我的图表文件:

digraph G {
    nodesep=1.25;
    splines=false;

    node[width=1, shape=circle];
    edge[style=invis];

    subgraph cluster_1 {
        label="Layer 1";
        "1-1" -> "1-2" -> "1-3";
    }

    subgraph cluster_2 {
        label="Layer 2";
        "2-1" -> "2-2" -> "2-3";
    }

    subgraph cluster_3 {
        label="Layer 3";
        "3-1" -> "3-2" -> "3-3";
    }

    edge[style=solid, penwidth=1, constraint=false];

    "1-1" -> "2-1";
    "1-3" -> "2-1";

    "1-1" -> "2-2";
    "1-2" -> "2-2";

    "1-2" -> "2-3";
    "1-3" -> "2-3";

    "2-1" -> "3-1";
    "2-3" -> "3-1";

    "2-1" -> "3-2";
    "2-2" -> "3-2";

    "2-2" -> "3-3";
    "2-3" -> "3-3";

}

我怎样才能让我的间距对称?任何帮助将非常感激。感谢。

更新: 我设法使间距均匀,但这不是一个完美的解决方案。

通过在图形上方放置一个不可见边缘并将其连接到每个图层中的顶部节点,这些图层均匀分布。但是,此节点会混淆需要在所示图像上方添加的内容的间距。那么,有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

添加外部群集

Correctly spaced image showing bounding box of added outer cluster 为了清晰起见,显示了外簇的边界框

将群集cluster_1cluster_2cluster_3嵌套在另一个群集中会导致布局引擎将它们均匀分隔。

使用布局引擎

但是,从下到上rankdir将从左到右的显示顺序反转为(cluster_3, cluster_2, cluster_1)。撤消源文件中的顺序可以修复[kludges over]。

工作代码

digraph G {
  nodesep=1.25;
  splines=false;
  clusterrank=local;
  node[width=1, shape=circle];
  edge[style=invis];

  subgraph cluster_0 {

    subgraph cluster_3 {
      label="Layer 3";
      "3-1" -> "3-2" -> "3-3";
    }

    subgraph cluster_2 {
      label="Layer 2";
      "2-1" -> "2-2" -> "2-3";
    }

    subgraph cluster_1 {
      label="Layer 1";
      "1-1" -> "1-2" -> "1-3";
    }
  }

 edge[style=solid, penwidth=1, constraint=false];

 "1-1" -> "2-1";
 "1-3" -> "2-1";

 "1-1" -> "2-2";
 "1-2" -> "2-2";

  "1-2" -> "2-3";
  "1-3" -> "2-3";

  "2-1" -> {"3-1" "3-2"};
  "2-3" -> {"3-1" "3-3"};

  "2-2" -> {"3-2" "3-3"};

}

备注

可以设置新外部群集的样式,使其边界框不可见。