How to manage distance between nodes in graphviz?

2019-04-05 11:10发布

问题:

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:

回答1:

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];
}



标签: graphviz dot