How to manage distance between nodes in graphviz?

2019-04-05 11:24发布

I am trying to plot a graph with 3 levels of nodes, with equal distances between the levels. However, graphviz somehow decides that the distance between the middle level and the bottom one should be much larger than the distance between the top and middle level. Any way to fix this?

Here is my code:

digraph g{
    rankdir="LR";
    graph [pad="0.5", ranksep="0.525", nodesep="3"];
    splines=false;
    node[shape = square];
    edge[style=invis];
    subgraph cluster_3 {
        color=invis;
        a1->a2->a3->a4->a5->a6->a7;
    }
    subgraph cluster_2 {
        color=invis;
        a->b->c->d->e->f->g;
    }
    subgraph cluster_1 {
        color=invis;
        1->2->3->4->5->6->7;
    }
    "a1" [label="1'"];
    "a2" [label="2'"];
    "a3" [label="3'"];
    "a4" [label="4'"];
    "a5" [label="5'"];
    "a6" [label="6'"];
    "a7" [label="7'"];
    edge[style=solid, constraint=false];
    a->1[arrowhead=none, arrowtail=none];
    a->2[arrowhead=none, arrowtail=none];
    a->3[arrowhead=none, arrowtail=none];
    a->a1[arrowhead=none, arrowtail=none];
    a->a2[arrowhead=none, arrowtail=none];
    a->a3[arrowhead=none, arrowtail=none];
    b->1[arrowhead=none, arrowtail=none];
    b->3[arrowhead=none, arrowtail=none];
    b->7[arrowhead=none, arrowtail=none];
    b->a1[arrowhead=none, arrowtail=none];
    b->a3[arrowhead=none, arrowtail=none];
    b->a7[arrowhead=none, arrowtail=none];
    c->2[arrowhead=none, arrowtail=none];
    c->6[arrowhead=none, arrowtail=none];
    c->7[arrowhead=none, arrowtail=none];
    c->a2[arrowhead=none, arrowtail=none];
    c->a6[arrowhead=none, arrowtail=none];
    c->a7[arrowhead=none, arrowtail=none];
    d->1[arrowhead=none, arrowtail=none];
    d->4[arrowhead=none, arrowtail=none];
    d->7[arrowhead=none, arrowtail=none];
    d->a1[arrowhead=none, arrowtail=none];
    d->a4[arrowhead=none, arrowtail=none];
    d->a7[arrowhead=none, arrowtail=none];
    e->1[arrowhead=none, arrowtail=none];
    e->2[arrowhead=none, arrowtail=none];
    e->3[arrowhead=none, arrowtail=none];
    e->a1[arrowhead=none, arrowtail=none];
    e->a2[arrowhead=none, arrowtail=none];
    e->a3[arrowhead=none, arrowtail=none];
    f->1[arrowhead=none, arrowtail=none];
    f->4[arrowhead=none, arrowtail=none];
    f->7[arrowhead=none, arrowtail=none];
    f->a1[arrowhead=none, arrowtail=none];
    f->a4[arrowhead=none, arrowtail=none];
    f->a7[arrowhead=none, arrowtail=none];
    g->5[arrowhead=none, arrowtail=none];
    g->6[arrowhead=none, arrowtail=none];
    g->7[arrowhead=none, arrowtail=none];
    g->a5[arrowhead=none, arrowtail=none];
    g->a6[arrowhead=none, arrowtail=none];
    g->a7[arrowhead=none, arrowtail=none];
}

The output looks like this currently: enter image description here

标签: graphviz dot
1条回答
Anthone
2楼-- · 2019-04-05 11:36

Just played around a bit and came up with the below graph, is this any closer to want to want?

digraph g{
    graph [pad="0.5", nodesep="1", ranksep="2"];
    splines="false";
    node[shape = square];
    edge[style=invis];
    a1->a->1
    a2->b->2
    a3->c->3
    a4->d->4
    a5->e->5
    a6->f->6
    a7->g->7

    "a1" [label="1'"];
    "a2" [label="2'"];
    "a3" [label="3'"];
    "a4" [label="4'"];
    "a5" [label="5'"];
    "a6" [label="6'"];
    "a7" [label="7'"];
    edge[style=solid, constraint=false];
    a->1[arrowhead=none, arrowtail=none];
    a->2[arrowhead=none, arrowtail=none];
    a->3[arrowhead=none, arrowtail=none];
    a->a1[arrowhead=none, arrowtail=none];
    a->a2[arrowhead=none, arrowtail=none];
    a->a3[arrowhead=none, arrowtail=none];
    b->1[arrowhead=none, arrowtail=none];
    b->3[arrowhead=none, arrowtail=none];
    b->7[arrowhead=none, arrowtail=none];
    b->a1[arrowhead=none, arrowtail=none];
    b->a3[arrowhead=none, arrowtail=none];
    b->a7[arrowhead=none, arrowtail=none];
    c->2[arrowhead=none, arrowtail=none];
    c->6[arrowhead=none, arrowtail=none];
    c->7[arrowhead=none, arrowtail=none];
    c->a2[arrowhead=none, arrowtail=none];
    c->a6[arrowhead=none, arrowtail=none];
    c->a7[arrowhead=none, arrowtail=none];
    d->1[arrowhead=none, arrowtail=none];
    d->4[arrowhead=none, arrowtail=none];
    d->7[arrowhead=none, arrowtail=none];
    d->a1[arrowhead=none, arrowtail=none];
    d->a4[arrowhead=none, arrowtail=none];
    d->a7[arrowhead=none, arrowtail=none];
    e->1[arrowhead=none, arrowtail=none];
    e->2[arrowhead=none, arrowtail=none];
    e->3[arrowhead=none, arrowtail=none];
    e->a1[arrowhead=none, arrowtail=none];
    e->a2[arrowhead=none, arrowtail=none];
    e->a3[arrowhead=none, arrowtail=none];
    f->1[arrowhead=none, arrowtail=none];
    f->4[arrowhead=none, arrowtail=none];
    f->7[arrowhead=none, arrowtail=none];
    f->a1[arrowhead=none, arrowtail=none];
    f->a4[arrowhead=none, arrowtail=none];
    f->a7[arrowhead=none, arrowtail=none];
    g->5[arrowhead=none, arrowtail=none];
    g->6[arrowhead=none, arrowtail=none];
    g->7[arrowhead=none, arrowtail=none];
    g->a5[arrowhead=none, arrowtail=none];
    g->a6[arrowhead=none, arrowtail=none];
    g->a7[arrowhead=none, arrowtail=none];
}

enter image description here

查看更多
登录 后发表回答