Graphviz中的布局

Graphviz中的布局,graphviz,Graphviz,基本问题是如何控制Graphviz图中元素的垂直和水平定位 考虑一下这个图的摘录(在wysiwig编辑器中创建) 我试图在Graphviz中复制它,以确定它是否适合我的目的 digraph G { compound=true; node [shape=box]; edge [dir=none]; subgraph cluster_tmk_web6 { nginx [label="nginx-frontend TCP 0.0.0.0:80"]; subg

基本问题是如何控制Graphviz图中元素的垂直和水平定位

考虑一下这个图的摘录(在wysiwig编辑器中创建)

我试图在Graphviz中复制它,以确定它是否适合我的目的

digraph G {
compound=true;
node [shape=box];
edge [dir=none];
    subgraph cluster_tmk_web6 {
        nginx [label="nginx-frontend TCP 0.0.0.0:80"];

        subgraph clusteradminapp {
            unicorn [label="unicorn_rails TCP 127.0.0.1:8080"];
            subgraph clusterROR {
            label="ROR v.2.1";
            brida [label="brida_face_client"];
            }
            label="Admin App";
        }

        memcached [label="memcached"];
        sphinx;
        mongodb;

        subgraph cluster_errbit {
            unicorn2;
            ror3;
        }

    label="tmk-web6.service.home";
    }       

nginx -> unicorn;
memcached -> brida [lhead=clusterROR];


}
结果是


我省略了一些箭头,但位置对我来说至关重要。如何将“memcached”和“sphinx”移动到集群的底部?如何将“mongodb”向右移动?最后,图表将由6到10个这样大小的集群组成。如何控制布局,将一些簇放在一行中,其他簇放在上面和下面?我想我应该在这里使用“rank”属性,但不确定如何使用。请提供帮助。

只需添加剩余边(和两条不可见边),graphviz输出就更接近您想要的结果:

digraph G {
compound=true;
node [shape=box];
edge [dir=none];
    subgraph cluster_tmk_web6 {
        nginx [label="nginx-frontend TCP 0.0.0.0:80"];

        subgraph clusteradminapp {
            unicorn [label="unicorn_rails TCP 127.0.0.1:8080"];
            subgraph clusterROR {
            label="ROR v.2.1";
            brida [label="brida_face_client"];
            }
            unicorn -> brida[style=invis];
            label="Admin App";
        }

        memcached [label="memcached"];
        sphinx;
        mongodb;

        subgraph cluster_errbit {
            unicorn2;
            ror3;
            unicorn2 -> ror3[style="invis"];
            label="Errbit";
        }

    label="tmk-web6.service.home";
    }       

nginx -> unicorn;
nginx -> unicorn2;
brida -> memcached [lhead=clusterROR];
brida -> sphinx [lhead=clusterROR];
ror3 -> mongodb;
}

添加一些颜色等等,你就快到了


但请记住,Graphviz不是所见即所得工具-它的优点是节点的自动布局。GraphViz更适合作为输出生成布局,而不是作为输入生成布局。