SRL
SRL

Reputation: 167

Create a straight edge between nodes if there is another node branching from the midpoint of the edge in DiagrammeR?

In DiagrammeR, I would like to pass a valid graph specification string in the DOT language to grViz() that will force a straight edge from node a0 to a1 when there is a separate edge branching off to b0. b0 will be larger than a0 so how do I align a0 and b0 on the same rank where the top of b0 is level with the top of a0?

Current graph specification:

library(DiagrammeR)
grViz("
  digraph G {
    
    node [shape=box];
    a0; a1;
    b0[height=1,width=2];
    node [shape = point, width = 0, height = 0];
    y1;
    
    a0 -> y1 [arrowhead=none];
    y1 -> a1;
    y1 -> b0;

    {rank=same; a0; b0;}
 
  }
")

Current output:

enter image description here

Desired output:

enter image description here

Upvotes: 1

Views: 79

Answers (1)

sroush
sroush

Reputation: 6793

b0 is different size, so had to change to rankdir=LR to put b0 in its own (vertical) rank.
Then placed a0, a1 and y1 in their own rank

digraph G {
    rankdir=LR  // b0 is larger, so place in a different rank

    node [shape=box];
    {rank=same
      a0; a1;
      y1 [shape = point, width = 0, height = 0];
    }
    b0[height=1.5,width=2];
    
    a0 -> y1 [arrowhead=none];
    y1 -> a1;
    y1 -> b0; 
}

Giving:
enter image description here

Upvotes: 2

Related Questions