强制graphviz中节点的从左到右顺序?

Posted

技术标签:

【中文标题】强制graphviz中节点的从左到右顺序?【英文标题】:Force the left to right order of nodes in graphviz? 【发布时间】:2015-07-04 01:48:30 【问题描述】:

我想使用 graphviz 绘制决策树图。

我要画的图是这样的:

我正在使用以下点语言:

graph a 
  A [shape=box; label="A"]
  B [shape=box; label="B"]
  al [shape=none; label="0"]
  bl [shape=none; label="1"]
  br [shape=none; label="0"]

  A -- al [label="0"];
  A -- B [label="1"];
  B -- bl [label="0"];
  B -- br [label="1"];


但是我的结果图是这样的:

如何强制graphviz生成的节点从左到右顺序?此外,就决策树而言,即使从左到右的顺序不同,这两棵树是否完全相同?

【问题讨论】:

你使用什么语言? @TimBiegeleisen 嗨,蒂姆,我只是在手动编写 .gv 文件。 【参考方案1】:

要解决此问题,您只需更改 Bal 节点的顺序:

graph a 
  A [shape=box; label="A"]
  al [shape=none; label="0"]
  B [shape=box; label="B"]
  bl [shape=none; label="1"]
  br [shape=none; label="0"]

  A -- al [label="0"];
  A -- B [label="1"];
  B -- bl [label="0"];
  B -- br [label="1"];

顺便说一下,graphviz 网站上有一个forum post about this problem,如果有机会可以看看。

【讨论】:

【参考方案2】:

请注意因为标题中的“从左到右”而点击此帖子的任何人。 @marapet 有一个很好的答案 to this post 指出外观顺序不会保留布局。如果您发现在图表中的某个点建立了左右布局,然后被后续边打破,请尝试在后续边中添加constraint=false,以防止它们改变现有的左右布局。

【讨论】:

以上是关于强制graphviz中节点的从左到右顺序?的主要内容,如果未能解决你的问题,请参考以下文章

python 用于2D阵列的从左到右从上到下遍历的指数生成器

UIImageView从左到右改变动画

求上到下打印出二叉树的每个节点三种题型

用HTML语言怎样使图片连续的从左到右滚动

剑指Offer32-Ⅱ从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。

剑指:之字形打印二叉树