Daniel
Daniel

Reputation: 581

Graphviz, dot, ortho plots do not respect ports

I am using graphviz and would like to render my graphs with splines = ortho. The problem is that the edges don't respect ports, so it is not possible to analyse the graph.

digraph G{
splines= ortho;

A [shape = box, label =<
                <TABLE BORDER="0" CELLBORDER="0" CELLSPACING="1"
CELLPADDING="2">
                <TR> <TD COLSPAN = "3"> A </TD></TR>

                <TR><TD PORT="1" BORDER = "1"> 1 </TD>
                        <TD ></TD>
                        <TD PORT="2" BORDER = "1"> 2 </TD>
                    </TR>
                </TABLE>>];

B [shape = box, label =<
                <TABLE BORDER="0" CELLBORDER="0" CELLSPACING="1"
CELLPADDING="2">
                <TR> <TD COLSPAN = "3"> B </TD></TR>

                <TR><TD PORT="1" BORDER = "1"> 1 </TD>
                        <TD ></TD>
                        <TD PORT="2" BORDER = "1"> 2 </TD>
                    </TR>
                </TABLE>>];

C [shape = box, style = filled, label =<
                <TABLE BORDER="0" CELLBORDER="0" CELLSPACING="1"
CELLPADDING="2">
                <TR> <TD COLSPAN = "3"> C </TD></TR>

                <TR><TD PORT="1" BORDER = "1"> 1 </TD>
                        <TD ></TD>
                        <TD PORT="2" BORDER = "1"> 2 </TD>
                    </TR>
                <TR> <TD PORT = "3" BORDER = "1"> 3 </TD></TR>
                </TABLE>>];

K [shape = box, label =<
                <TABLE BORDER="0" CELLBORDER="0" CELLSPACING="1"
CELLPADDING="2">
                <TR> <TD COLSPAN = "3"> K </TD></TR>

                <TR><TD PORT="1" BORDER = "1"> 1 </TD>
                        <TD ></TD>
                        <TD PORT="2" BORDER = "1"> 2 </TD>
                    </TR>
                </TABLE>>];

A:1 -> B:2;
A:2 -> B:2;
A:2 -> C:1;
B:1 -> C:1;
K:2 -> C:1;
B:2 -> K:1;
K:2 -> A:1;
B:1 -> C:3;
K:2 -> D;
K:2 -> E;
}

result:

splines = ortho result

I found the issue on the official graphviz site but there seems to be no improvement since 2011. Does anyone know a way to circumvent the problem? Or is there a chance that I can fix it myself?

Upvotes: 50

Views: 2381

Answers (1)

n0dus
n0dus

Reputation: 151

I think you can achieve what you are trying to do using subgraphs:

digraph G{
splines= ortho;

subgraph cluster_0 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white,shape=box,label="1"];
        a1;
        node [style=filled,color=white,shape=box,label="2"];
        a2;
        label = "A";
    }

subgraph cluster_1 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white,shape=box,label="1"];
        b1;
        node [style=filled,color=white,shape=box,label="2"];
        b2;
        label = "B";
    }

subgraph cluster_2 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white,shape=box,label="1"];
        c1;
        node [style=filled,color=white,shape=box,label="2"];
        c2;
        node [style=filled,color=white,shape=box,label="3"];
        c3;
        label = "C";
    }

subgraph cluster_3 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white,shape=box,label="1"];
        k1;
        node [style=filled,color=white,shape=box,label="2"];
        k2;
        label = "K";
    }

D [style=filled,color=white,shape=box,color=lightgrey;]
E [style=filled,color=white,shape=box,color=lightgrey;]

a1 -> b2;
a2 -> b2;
a2 -> c1;
b1 -> c1;
k2 -> c1;
b2 -> k1;
k2 -> a1;
b1 -> c3;
k2 -> D;
k2 -> E;
}

Result:

Graphviz Output

Upvotes: 1

Related Questions