Ben A
Ben A

Reputation: 117

Graphviz/DOT: How to have arrow "redirected"

This is what I want to produce in a DOT graph:

graph

I have the following code:

\digraph
[scale=0.7]{g1}
{
   margin="0 0 0 0";
   rankdir="TB";
"X" [shape=invhouse];
" " [shape=house];
"100" [shape=cylinder];
"X" -> "100"
"X" -> "+";
"100" -> "+"
"+" -> " ";
}

I also have the following code, which is closer in a sense but visually looks nothing like what I want:

digraph {
        node[ shape = plaintext ];
        a [label="X", shape = invhouse]
        b [label="+", shape = ellipse]
        ab1 [label="dummy", style=invis, shape=point]
        ab2 [label="dummy", style=invis, shape=point]
        c [label="100", shape = cylinder]
        d [label=" ", shape=house]
        subgraph cluster_0 {
        style=invis
                a -> ab1 [arrowhead=none];
                ab1 -> c;
                c -> ab2;
                ab1 -> ab2 [arrowhead=none];
                ab2 -> b;
                b -> d;
        }
}

How can I change my code(s) appropriately? Any help would be greatly appreciated.

Upvotes: 1

Views: 464

Answers (1)

stefan
stefan

Reputation: 3759

the group attribute helps to bring nodes in line.

digraph {
    node[ shape = plaintext group=abd];
    a [label="X", shape = invhouse]
    b [label="+", shape = ellipse]
    ab1 [label="dummy", style=invis, shape=point]
    ab2 [label="dummy", style=invis, shape=point]
    c [label="100", shape = cylinder, group=c]
    d [label=" ", shape=house]
    subgraph cluster_0 {
    style=invis
            a -> ab1 [arrowhead=none];
            ab1 -> c;
            c -> ab2;
            ab1 -> ab2 [arrowhead=none];
            ab2 -> b;
            b -> d;
    }
}

straightened out

Upvotes: 1

Related Questions