Graphviz,dot,ortho plot不尊重端口

Dan*_*iel 11 html dot graphviz orthogonal edges

我正在使用graphviz,并希望使用splines = ortho.问题是边缘不尊重端口,因此无法分析图形.

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;
}
Run Code Online (Sandbox Code Playgroud)

结果:

样条=正交结果

我在官方graphviz网站上发现了这个问题,但自2011年以来似乎没有任何改进.有没有人知道如何规避这个问题?或者我有机会自己解决这个问题吗?

n0d*_*dus 1

我认为你可以使用子图来实现你想要做的事情:

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;
}
Run Code Online (Sandbox Code Playgroud)

结果:

图形可视化输出