Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graphviz中的集群赢得';对称t空间_Graphviz_Dot - Fatal编程技术网

Graphviz中的集群赢得';对称t空间

Graphviz中的集群赢得';对称t空间,graphviz,dot,Graphviz,Dot,我试图让多个节点集群在Graphviz中均匀分布 我认为这张图片最好地解释了我要做的事情: 从图中可以看到,第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];

我试图让多个节点集群在Graphviz中均匀分布

我认为这张图片最好地解释了我要做的事情:

从图中可以看到,第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";

}
我怎样才能使我的间隔对称?任何帮助都将不胜感激。谢谢

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

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

添加外部集群 为清晰起见,显示了外部簇的边界框

将群集
cluster_1
cluster_2
cluster_3
嵌套在另一个群集中会使布局引擎将它们均匀地隔开

使用布局引擎 但是,从下到上的
rankdir
将从左到右的显示顺序反转为
(cluster_3、cluster_2、cluster_1)
。颠倒源文件中的顺序可以修复[kludges over]

工作代码 笔记
新的外部集群可以设置样式,使其边界框不可见。

我认为您在布局引擎中发现了一个bug。额外的空间出现在带有样条线的边
“x-3”->“y-1”
将围绕节点
“y-2”
@stefan进行布线的位置,没有容器,布局引擎没有理由认为相等的间距很重要(这并不是说它不应该被编程为这样做)。将集群嵌套在另一个集群中会导致布局引擎将它们平均隔开。请参阅下面我的答案中的代码。@benrudgers:有或没有“容器”(container)的推理(没有)是相同的。等间距只是偶然的,外部星团中的大空白确实清楚地表明了确定内部图形大小的问题。另请参阅我对下面答案的评论。首先,外部集群会拉伸图形大小,这是不必要的行为。第二,在一个集群中,集群绝对没有排序。您的示例给出了我的计算机上群集的随机顺序(win7 64位;gv 2.38.0)。结果是123像你的图像一样,321有两个大的间距,甚至是一个粗大的231。@stefan像你的问题一样,图形的大小是默认值。本手册描述了如何控制该行为。这次我让你自己读。不客气,我没问任何问题。我确实指出了为什么我认为你的解决方案不是解决方案。首先,外部集群会拉伸图形大小。我说的不是可见性,而是以像素为单位恢复图像。如果我过度阅读了一个解决方案,我会很高兴你能将我和OP指向手册中的要点,并为OP和所有其他读者发布一个可复制的解决方案。第二,你的“解决方案”确实表现出随机行为。请检查一下。除非这是一个针对我的版本2.33.0的bug,否则我认为你的解决方案是错误的,请你重新绘制你的答案。我的解决方案是解决问题中最简单的方法。它在LinuxUbuntu15.04上工作稳定。应向开发人员报告Windows的问题。如果问题是像素,请尝试输出到SVG。文件可通过Graphviz网站获取。我很抱歉把你的问题与问题中提出的问题混淆了。
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"};

}