0__
0__

Reputation: 67330

GraphViz ignores my node positions

I can't get GraphViz to respect some node positions, even though they have pos attributes with !. 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.
}

The top most rank should be evenly distributed, but is not. The horizontal spacing between the top most nodes is not the same:

enter image description here

Upvotes: 2

Views: 1571

Answers (1)

marapet
marapet

Reputation: 56566

From the documentation of the pos attribute:

In neato and fdp, pos can be used to set the initial position of a node.

Are you using neato or fdp? Because dot does not respect this attribute.


Assuming you're using neato, here's an excerpt from the manual:

-n[1|2] (no-op) If set, neato assumes nodes have already been positioned and all nodes have a pos attribute giving the positions

This means you can render a graph with

neato -n2 -Tpng mygraph.gv -o mygraph.png

and have neato respect the pos attributes (in points) of the nodes.

This also states that all nodes must have a pos attribute.

Since some nodes of your graph do not have a pos attribute, this will lead to an error.

Upvotes: 3

Related Questions