有没有办法在某些情况下水平显示框,而在其他情况下垂直显示框? (请参阅related question)。

这是我得到的代码和输出:

代码:

/**
** Diagram representing the Simulator Engine
**/
digraph G {
        graph [
            rankdir = "TB"
        ];

        /**
        ** The simulator engine rectangle
        **/
    subgraph cluster_simulator_engine {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white];
        label = "Simulator Engine";

                /**
                ** The first topology
                **/
                subgraph cluster_T1 {
                        color=white;
                        node [style=filled];

                        /**
                        ** The n^th neuron
                        **/
                        subgraph cluster_T1_N3 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron n";

                                /**
                                ** The n^th synapse
                                **/
                                "T1_N3_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T1_N3_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T1_N3_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                /*"T1_N1_S3" -> "T1_N1_S2" [style=invis];*/
                        }

                        /**
                        ** The second neuron
                        **/
                        subgraph cluster_T1_N2 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron 2";

                                /**
                                ** The n^th synapse
                                **/
                                "T1_N2_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T1_N2_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T1_N2_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                /*"T1_N1_S3" -> "T1_N1_S2" [style=invis];*/
                        }


                        /**
                        ** The third neuron
                        **/
                        subgraph cluster_T1_N1 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron 1";

                                /**
                                ** The n^th synapse
                                **/
                                "T1_N1_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T1_N1_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T1_N1_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                /*"T1_N1_S3" -> "T1_N1_S2" [style=invis];*/
                        }


                        label = "Topology 1";
                }

                /**
                ** The second topology
                **/
                subgraph cluster_T2 {
                        color=white;
                        node [style=filled];

                        /**
                        ** The n^th neuron
                        **/
                        subgraph cluster_T2_N3 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron n";

                                /**
                                ** The n^th synapse
                                **/
                                "T2_N3_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T2_N3_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T2_N3_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                /*"T1_N1_S3" -> "T1_N1_S2" [style=invis];*/
                        }

                        /**
                        ** The second neuron
                        **/
                        subgraph cluster_T2_N2 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron 2";

                                /**
                                ** The n^th synapse
                                **/
                                "T2_N2_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T2_N2_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T2_N2_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                /*"T1_N1_S3" -> "T1_N1_S2" [style=invis];*/
                        }


                        /**
                        ** The third neuron
                        **/
                        subgraph cluster_T2_N1 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron 1";

                                /**
                                ** The n^th synapse
                                **/
                                "T2_N1_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T2_N1_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T2_N1_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                /*"T1_N1_S3" -> "T1_N1_S2" [style=invis];*/
                        }


                        label = "Topology 2";
                }

    }

}

输出:

显然,这太长了。我想要的是将每个突触移动到自己的行中(我认为它在Graphviz-jargon中称为“等级”)。显然,没有办法做到这一点,但是有一个trick。因此,我采用上面相同的代码,并引入了像这样的不可见边缘

代码:
/**
** Diagram representing the Simulator Engine
**/
digraph G {
        graph [
            rankdir = "TB"
        ];

        /**
        ** The simulator engine rectangle
        **/
    subgraph cluster_simulator_engine {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white];
        label = "Simulator Engine";

                /**
                ** The first topology
                **/
                subgraph cluster_T1 {
                        color=white;
                        node [style=filled];

                        /**
                        ** The n^th neuron
                        **/
                        subgraph cluster_T1_N3 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron n";

                                /**
                                ** The n^th synapse
                                **/
                                "T1_N3_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T1_N3_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T1_N3_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                "T1_N3_S1" -> "T1_N3_S2" [style=invis];
                                "T1_N3_S2" -> "T1_N3_S3" [style=invis];
                        }

                        /**
                        ** The second neuron
                        **/
                        subgraph cluster_T1_N2 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron 2";

                                /**
                                ** The n^th synapse
                                **/
                                "T1_N2_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T1_N2_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T1_N2_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                "T1_N2_S2" -> "T1_N2_S3" [style=invis];
                                "T1_N2_S1" -> "T1_N2_S2" [style=invis];
                        }


                        /**
                        ** The third neuron
                        **/
                        subgraph cluster_T1_N1 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron 1";

                                /**
                                ** The n^th synapse
                                **/
                                "T1_N1_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T1_N1_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T1_N1_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                "T1_N1_S1" -> "T1_N1_S2" [style=invis];
                                "T1_N1_S2" -> "T1_N1_S3" [style=invis];
                        }


                        label = "Topology 1";
                }

                /**
                ** The second topology
                **/
                subgraph cluster_T2 {
                        color=white;
                        node [style=filled];

                        /**
                        ** The n^th neuron
                        **/
                        subgraph cluster_T2_N3 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron n";

                                /**
                                ** The n^th synapse
                                **/
                                "T2_N3_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T2_N3_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T2_N3_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                "T2_N3_S1" -> "T2_N3_S2" [style=invis];
                                "T2_N3_S2" -> "T2_N3_S3" [style=invis];
                        }

                        /**
                        ** The second neuron
                        **/
                        subgraph cluster_T2_N2 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron 2";

                                /**
                                ** The n^th synapse
                                **/
                                "T2_N2_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T2_N2_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T2_N2_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                "T2_N2_S1" -> "T2_N2_S2" [style=invis];
                                "T2_N2_S2" -> "T2_N2_S3" [style=invis];
                        }


                        /**
                        ** The third neuron
                        **/
                        subgraph cluster_T2_N1 {
                                color=lightgrey;
                                node [style=filled];
                                label = "Neuron 1";

                                /**
                                ** The n^th synapse
                                **/
                                "T2_N1_S3" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse n"
                                ];

                                /**
                                ** The second synapse
                                **/
                                "T2_N1_S2" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 2"
                                ];

                                /**
                                ** The first synapse
                                **/
                                "T2_N1_S1" [
                                    style=filled
                                    shape=box
                                    color=white
                                    label="Synapse 1"
                                ];

                                "T2_N1_S1" -> "T2_N1_S2" [style=invis];
                                "T2_N1_S2" -> "T2_N1_S3" [style=invis];
                        }


                        label = "Topology 2";
                }

    }

}

现在输出看起来更具吸引力。

输出:

但是现在,突触盒之间存在巨大的差距。设置nodesep=0.1len=0.1无效。谁能告诉我如何解决此问题,或如何重新设计此问题。

注意:如果有人好奇为什么我从1到2到n,那是因为我计划在其中放一个椭圆,但是我不知道如何做……当我到达那座桥时。

最佳答案

您要查找的是 ranksep -将此行添加到图形的属性中:

ranksep = 0.1

10-04 20:21