首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图形:禁止水平边缘,始终显示垂直方向。

图形:禁止水平边缘,始终显示垂直方向。
EN

Stack Overflow用户
提问于 2015-05-19 15:59:59
回答 2查看 922关注 0票数 1

我有一个有向无圈图,我试图用Graphviz的dot来可视化它。默认情况下,它是从上到下排列的。

通常,所有定向边缘的头部都比尾巴低。但在某些情况下,它们被画成一个水平直线段,即头和尾处于同一水平。在我的例子中,这是在我定义子图集群之后发生的。

他们是否禁止这样做,并强迫其始终定位节点,以便箭头指向“向下”?

样本来源:

代码语言:javascript
复制
digraph {
  rankdir=TB;
  subgraph cluster_1 { "8"; "7"; "9"; "11"; "10" }
  subgraph cluster_2 { "3"; "4"; "5"; }

  "1" -> "3";
  "2" -> "5";
  "3" -> "6";
  "3" -> "5";
  "2" -> "8";
  "2" -> "4";
  "2" -> "3";
  "2" -> "6";
  "2" -> "7";
  "1" -> "8";
  "7" -> "8";
  "4" -> "6";
  "6" -> "10";
  "3" -> "11";
  "7" -> "10";
  "7" -> "6";
  "1" -> "2";
  "6" -> "5";
  "7" -> "9";
  "7" -> "5";
  "4" -> "5";
  "6" -> "8";
  "3" -> "4";
  "10" -> "11";
  "4" -> "11";
  "3" -> "8";
  "8" -> "9";
  "6" -> "9";
  "9" -> "10";
  "3" -> "10";
  "3" -> "7";
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-15 10:38:25

我知道这是一个老问题,但我会提供这个答案,供日后参考:

您可以使用newrank = true;,它根据graphviz.org网站执行以下操作

原有的点排序算法在聚类上是递归的。这可以产生更少的排名和更紧凑的布局,但有时代价是一个头部节点被放置在一个更高的排名比尾部节点。它还假定节点不受单独的、不兼容的子图的约束。例如,节点不能在集群中,也不能受到rank=same的约束,而节点不在集群中。 如果是newrank=true,则排序算法只进行一次全局排序,忽略了聚类。这允许节点受多个约束的约束。秩约束通常优先于边缘约束。

因此,您的源只更改如下:

代码语言:javascript
复制
  digraph {
      rankdir=TB;
      newrank = true;
      ...

这个例子的结果会好得多:

票数 4
EN

Stack Overflow用户

发布于 2015-05-20 08:37:15

这种行为是由固定内部节点等级的集群造成的。外部边缘的“力”可以水平地拉动节点,但对等级没有影响。

您必须避免集群或插入不可见的节点和边缘。

一个显示秩修正的最小示例

代码语言:javascript
复制
digraph {
    subgraph cluster_1 {
        1
        3
    }
    1 -> 2
    2 -> 3
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30330584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档