dot / graphviz:如何强制2个节点并排

时间:2012-10-25 09:17:53

标签: graphviz dot edge

我使用dot -Tsvg创建了一个图表。

这是我制作的点语言文件:

digraph genealogy {
    size = "7,7";
    node [fontsize = "10", shape = "box", style="filled", fillcolor="aquamarine"];
    p1 [ fillcolor="aquamarine", label="node" ];
    p2 [ fillcolor="aquamarine", label="node" ];
    p3 [ fillcolor="aquamarine", label="node" ];
    p4 [ fillcolor="aquamarine", label="node" ];
    p5 [ fillcolor="aquamarine", label="node" ];
    p6 [ fillcolor="aquamarine", label="node" ];
    p7 [ fillcolor="aquamarine", label="node" ];
    p8 [ fillcolor="aquamarine", label="node" ];
    p9 [ fillcolor="aquamarine", label="node" ];
    p11 [ fillcolor="aquamarine", label="node" ];
    p12 [ fillcolor="aquamarine", label="node" ];
    p13 [ fillcolor="aquamarine", label="node" ];
    p16 [ fillcolor="aquamarine", label="node" ];
    p17 [ fillcolor="aquamarine", label="node" ];
    b1 [ shape = "point", style="filled", fillcolor="white" ];
    p3 -> b1 [arrowhead = "none", color="red"];
    b2 [ shape = "point", style="filled", fillcolor="white" ];
    p2 -> b2 [arrowhead = "none", color="red"];
    p3 -> b2 [arrowhead = "none", color="red"];
    b3 [ shape = "point", style="filled", fillcolor="white" ];
    p4 -> b3 [arrowhead = "none", color="red"];
    p5 -> b3 [arrowhead = "none", color="red"];
    b4 [ shape = "point", style="filled", fillcolor="white" ];
    p6 -> b4 [arrowhead = "none", color="red"];
    p11 -> b4 [arrowhead = "none", color="red"];
    b2 -> p1 [arrowhead = "onormal", color="red"];
    b3 -> p2 [arrowhead = "onormal", color="red"];
    b3 -> p6 [arrowhead = "onormal", color="red"];
    b3 -> p7 [arrowhead = "onormal", color="red"];
    b4 -> p8 [arrowhead = "onormal", color="red"];
    b4 -> p9 [arrowhead = "onormal", color="red"];
    b1 -> p12 [arrowhead = "onormal", color="red"];
    b1 -> p13 [arrowhead = "onormal", color="red"];
    b1 -> p16 [arrowhead = "onormal", color="red"];
    p4 -> p5 [dir="none", arrowhead = "none",  color="blue"];
    p7 -> p17 [dir="none", arrowhead = "none",  color="blue"];
}

结果如下:

我想强制通过蓝线连接的节点并排(水平),而不是在彼此之下或在另一个疯狂的位置。

这可能吗?

感谢您的意见! :)

1 个答案:

答案 0 :(得分:4)

您可以使用rank属性。设置排名="相同"或排名="来源"可能是帮助。这将两个节点放在相同的等级或最低等级上。这是其中一种可能性:

digraph genealogy {
    size = "7,7";
    node [fontsize = "10", shape = "box", style="filled", fillcolor="aquamarine"];

    subgraph _1 {
     rank="same";
     p4 [ fillcolor="aquamarine", label="node" ];
     p5 [ fillcolor="aquamarine", label="node" ];
     p4 -> p5 [dir="none", arrowhead = "none",  color="blue"];
}
    subgraph _2 {   
    rank="source";  
    p7 [ fillcolor="aquamarine", label="node" ];
    p17 [ fillcolor="aquamarine", label="node" ];
    p7 -> p17 [dir="none", arrowhead = "none",  color="blue"];
}

p1 [ fillcolor="aquamarine", label="node" ];
p2 [ fillcolor="aquamarine", label="node" ];
p3 [ fillcolor="aquamarine", label="node" ];
p6 [ fillcolor="aquamarine", label="node" ];
p8 [ fillcolor="aquamarine", label="node" ];
p9 [ fillcolor="aquamarine", label="node" ];
p11 [ fillcolor="aquamarine", label="node" ];
p12 [ fillcolor="aquamarine", label="node" ];
p13 [ fillcolor="aquamarine", label="node" ];
p16 [ fillcolor="aquamarine", label="node" ];
b1 [ shape = "point", style="filled", fillcolor="white" ];
p3 -> b1 [arrowhead = "none", color="red"];
b2 [ shape = "point", style="filled", fillcolor="white" ];
p2 -> b2 [arrowhead = "none", color="red"];
p3 -> b2 [arrowhead = "none", color="red"];
b3 [ shape = "point", style="filled", fillcolor="white" ];
p4 -> b3 [arrowhead = "none", color="red"];
p5 -> b3 [arrowhead = "none", color="red"];
b4 [ shape = "point", style="filled", fillcolor="white" ];
p6 -> b4 [arrowhead = "none", color="red"];
p11 -> b4 [arrowhead = "none", color="red"];
b2 -> p1 [arrowhead = "onormal", color="red"];
b3 -> p2 [arrowhead = "onormal", color="red"];
b3 -> p6 [arrowhead = "onormal", color="red"];
b3 -> p7 [arrowhead = "onormal", color="red"];
b4 -> p8 [arrowhead = "onormal", color="red"];
b4 -> p9 [arrowhead = "onormal", color="red"];
b1 -> p12 [arrowhead = "onormal", color="red"];
b1 -> p13 [arrowhead = "onormal", color="red"];
b1 -> p16 [arrowhead = "onormal", color="red"];

}

Output is here