GraphViz忽略我的节点位置

时间:2013-10-17 12:28:44

标签: graphviz

我无法让GraphViz尊重某些节点位置,即使它们具有pos属性!。 E.g:

digraph Versions {
  ranksep=0.05;
  node [style=filled, shape=point, fillcolor=black, fixedsize=true, width=0.3, height=0.1, fontname="Helvetica", fontsize=8, fontcolor=white];
  edge [arrowhead=none, len=0.1];
  2 [pos="0,0!", fillcolor=red];
  3 [pos="20,0!", fillcolor=red];
  4 [pos="40,0!", fillcolor=red];
  5 [pos="60,0!", fillcolor=red];
  6 [pos="80,0!", fillcolor=red];
  7 [pos="100,0!", fillcolor=red];
  8 [pos="120,0!", fillcolor=red];
  9 [pos="140,0!", fillcolor=red];
  10 [pos="160,0!", fillcolor=red];
  11 [pos="180,0!", fillcolor=red];
  12 [pos="200,0!", fillcolor=red];
  13 [pos="220,0!", fillcolor=red];
  2 -> 14;
  14 -> 15;
  3 -> 16;
  16 -> 17;
  11 -> 18;
  18 -> 19;
  6 -> 20;
  20 -> 21;
  10 -> 22;
  22 -> 23;
  13 -> 24;
  24 -> 25;
  9 -> 26;
  26 -> 27;
  4 -> 28;
  28 -> 29;
  7 -> 30;
  30 -> 31;
  5 -> 32;
  32 -> 33;
  8 -> 34;
  34 -> 35;
  12 -> 36;
  36 -> 37;
  15 -> 38;
  38 -> 39;
  17 -> 40;
  40 -> 41;
  19 -> 42;
  42 -> 43;
  // etc.
}

排名最高的排名应该均匀分布,但不是。最顶层节点之间的水平间距不同:

enter image description here

1 个答案:

答案 0 :(得分:1)

来自pos属性的文档:

  

在neato和fdp中,pos可用于设置节点的初始位置。

您使用的是 neato 还是 fdp 因为 dot 不尊重此属性。


假设你正在使用neato,这里摘录自manual

  

-n [1 | 2] (no-op)如果设置,则neato假设节点已经定位,并且所有节点都有pos属性给出位置

这意味着您可以使用

呈现图形
neato -n2 -Tpng mygraph.gv -o mygraph.png

并且neato尊重节点的pos属性(以点为单位)。

这也表明所有节点必须具有pos属性。

由于图表的某些节点没有pos属性,因此会导致错误。