Graphviz 图形水平对齐顶部/底部的节点

Graphviz 图形水平对齐顶部/底部的节点,graphviz,dot,Graphviz,Dot,我想画一张这样的图表 我思考和搜索了很长时间,我只能生成下面的图片 有向图G{ 节点[形状=纯文本] //newrank=true; 子图第1部分{ {rank=相同的状态0、状态9、状态6} 子图nest1{ state0[label=< 0 标准普尔;・E$ E&rarr;・E+TE&rarr;・T T&rarr;・idT&rarr;・(E) >]; } 子图nest2{ 国家6[标签=< 6. T&rarr(・(E) E&rarr;・E+TE&rarr;・T T&rarr;・idT&r

我想画一张这样的图表

我思考和搜索了很长时间,我只能生成下面的图片

有向图G{
节点[形状=纯文本]
//newrank=true;
子图第1部分{
{rank=相同的状态0、状态9、状态6}
子图nest1{
state0[label=<
0
标准普尔;・E$
E&rarr;・E+T
E&rarr;・T T&rarr;・id
T&rarr;・(E) >]; } 子图nest2{ 国家6[标签=< 6. T&rarr(・(E) E&rarr;・E+T
E&rarr;・T T&rarr;・id
T&rarr;・(E) >]; } 子图nest3{ 国家9[标签=< 9 E&rarr;T・ >]; 国家5[标签=< 5. T&rarr;id・ >]; } //{rank=same;nest1;nest2;nest3;} //nest1->nest2->nest3[style=invi] } 子图第2部分{ {rank=相同的状态1、状态3、状态7} 国家1[标签=< 1. 标准普尔・$
E&rarr;E・+T >]; 国家7[标签=< 7. T&rarr;(E)・) E&rarr;E・+T >]; 第3条[标签=< 3. E&rarr;E+・T T&rarr;・id
T&rarr;・(E) >]; } 子图第3部分{ {rank=相同的状态2、状态4、状态8} 国家2[标签=< 2. 标准普尔$・ >]; 国家8[标签=< 8. T&rarr;(E)・ >]; 国家4[标签=< 4. E&rarr;E+T・ >]; } //state0:s->state1:n[label=“E”] //state0:title:e->state9:title:w[label=“T”] //state0:text3:e->state5:text:w[label=“id”] //state0:text2:e->state6:text2:w[label=“(”] state0:s->state1:n[label=“E”] state0->state9[label=“T”] state0->state5[label=“id”] state0->state6[label=“(”,weight=100] state1:s->state2:n[label=“$”] 状态1:title:e->state3:title:w[label=“+”] 状态3:s->状态4:n[label=“T”] state3:n->state5:s[label=“id”] //state3:title:e->state6:s[label=“(”] state3:title:e->state6[label=“(”] //state6:text3:w->state5:text:e[label=“id”] //状态6:s->状态7:n[label=“E”] //状态6:title:w->state9:title:e[label=“T”] //state6:title:n->state6:e[label=“(”] 状态6:s->状态7:n[label=“E”] state6->state9[label=“T”] state6->state5[label=“id”] state6->state6[label=“(”] state7:text2:w->state3:text2:e[label=“+”] state7:s->state8:n[label=“)”] //------垂直排列节点组的不可见边 state9:s->state5:n[style=invi] state5:s->state3:n[style=invi] state3:s->state4:n[style=invi] state6:s->state7:n[style=invi] state7:s->state8:n[style=invi] // --------------------------------------------------- //在两行下方,确保顺序1 3 7 | 2 4 8正确 state1->state3->state7[style=invi] state2->state4->state8[style=invi] state0:text1:e->state9:text1:w[style=invi] state9:text1:e->state6:text1:w[style=invi] }
我想调整0 9 5 6部分。这意味着我需要对相同的0 9/5 6进行排序,我尝试使用子图,但它不能解决问题

有没有办法使两个节点水平对齐,并使它们像HTML图像一样上下对齐



tk421 memtions
neato
在他的回答中,请参阅以了解更多详细信息。

可以应用一些修复。
样条线=正交
将边更改为垂直线和水平线。执行此操作时,必须将边标签重新制作为
xlabel=
,而不是
标签=

但是,9和5未正确放置。如果改用
neato
对于
dot
,您可以将节点精确定位到您想要的位置。然后您可以 删除所有子图和不可见节点以及权重,然后执行以下操作:

graphviz代码为:

digraph G {
    splines=ortho;
    node [shape=plaintext]

    state0 [label=<
            <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">0</TD></TR>
            <TR><TD PORT="text1" bgcolor="red">S&rarr; ・E$</TD></TR>
            <TR><TD PORT="text2" bgcolor="green">E&rarr; ・E+T <br/> E&rarr;・T </TD></TR>
            <TR><TD PORT="text3" bgcolor="green">T&rarr; ・id <br/> T&rarr;・(E)</TD></TR>
            </TABLE>>, pos="0,4!"];

    state6 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">6</TD></TR>
            <TR><TD PORT="text1" bgcolor="red">T&rarr;(・E) </TD></TR>
            <TR><TD PORT="text2" bgcolor="green">E&rarr; ・E+T <br/> E&rarr;・T </TD></TR>
            <TR><TD PORT="text3" bgcolor="green">T&rarr; ・id <br/> T&rarr;・(E)</TD></TR>
            </TABLE>>, pos="4,4!"];

    state9 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">9</TD></TR>
            <TR><TD PORT="text" bgcolor="red">E&rarr;T・ </TD></TR>
            </TABLE>>, pos="2,4.7!"];

    state5 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">5</TD></TR>
            <TR><TD PORT="text" bgcolor="red">T&rarr;id・ </TD></TR>
            </TABLE>>, pos="2,3.3!"];

    state1 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">1</TD></TR>
            <TR><TD PORT="text" bgcolor="red">S&rarr;E・$<br/>E&rarr;E・+T</TD></TR>
            </TABLE>>, pos="0,1.5!"];

    state7 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">7</TD></TR>
            <TR><TD PORT="text1" bgcolor="red">T&rarr;(E・) </TD></TR>
            <TR><TD PORT="text2" bgcolor="green">E&rarr; E・+T</TD></TR>
            </TABLE>>, pos="4,1.5!"];

    state3 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">3</TD></TR>
            <TR><TD PORT="text1" bgcolor="red">E&rarr;E+・T </TD></TR>
            <TR><TD PORT="text2" bgcolor="green">T&rarr;・id <br/> T&rarr;・(E) </TD></TR>
            </TABLE>>, pos="2,1.5!"];

    state2 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">2</TD></TR>
            <TR><TD PORT="text" bgcolor="red">S&rarr;E$・ </TD></TR>
            </TABLE>>, pos="0,0!"];

    state8 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">8</TD></TR>
            <TR><TD PORT="text" bgcolor="red">T&rarr;(E)・ </TD></TR>
            </TABLE>>, pos="4,0!"];

    state4 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">4</TD></TR>
            <TR><TD PORT="text" bgcolor="red">E&rarr;E+T・ </TD></TR>
            </TABLE>>, pos="2,0!"];

    state0:s -> state1:n [xlabel="E"]
    state0 -> state9 [xlabel="T"]
    state0:e -> state5:w [xlabel="id"]
    state0 -> state6 [xlabel="("]

    state1:s -> state2:n [xlabel="$"]
    state1:title:e -> state3:title:w [xlabel="+"]

    state3:s -> state4:n [xlabel="T"]
    state3:n -> state5:s [xlabel="id"]
    state3:title:e -> state6 [xlabel="("]

    state6:s -> state7:n [xlabel="E"]
    state6 -> state9 [xlabel="T"]
    state6 -> state5 [xlabel="id"]
    state6 -> state6 [xlabel="("]

    state7:text2:w -> state3:text2:e [xlabel="+"]
    state7:s -> state8:n [xlabel=")"]
}
有向图G{
样条线=正交;
节点[形状=纯文本]
state0[label=<
0
标准普尔;・E$
E&rarr;・E+T
E&rarr;・T T&rarr;・id
T&rarr;・(E) >,pos=“0,4!”; 国家6[标签=< 6. T&rarr(・(E) E&rarr;・E+T
E&rarr;・T T&rarr;・id
T&rarr;・(E) >,pos=“4,4!”; 国家9[标签=< 9 E&rarr;T・ >,pos=“2,4.7!”; 国家5[标签=< 5. T&rarr;id・ >,pos=“2,3.3!”; 国家1[标签=< 1. 标准普尔・$
E&rarr;E・+T >,pos=“0,1.5!”; 国家7[标签=< 7. T&rarr;(E)・) E&rarr;E・+T >,pos=“4,1.5!”; 第3条[标签=< 3. E&rarr;E+・T T&rarr;・id
T&rarr;・(E) >,pos=“2,1.5!”; 国家2[标签=< 2. 标准普尔$・ >,pos=“0,0!”; 国家8[标签=< 8. T&rarr;(E)・ >,pos=“4,0!”; 国家4[标签=< 4. E&rarr;E+T・ >,pos=“2,0!”; 状态0:s->state1
digraph G {
    splines=ortho;
    node [shape=plaintext]

    state0 [label=<
            <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">0</TD></TR>
            <TR><TD PORT="text1" bgcolor="red">S&rarr; ・E$</TD></TR>
            <TR><TD PORT="text2" bgcolor="green">E&rarr; ・E+T <br/> E&rarr;・T </TD></TR>
            <TR><TD PORT="text3" bgcolor="green">T&rarr; ・id <br/> T&rarr;・(E)</TD></TR>
            </TABLE>>, pos="0,4!"];

    state6 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">6</TD></TR>
            <TR><TD PORT="text1" bgcolor="red">T&rarr;(・E) </TD></TR>
            <TR><TD PORT="text2" bgcolor="green">E&rarr; ・E+T <br/> E&rarr;・T </TD></TR>
            <TR><TD PORT="text3" bgcolor="green">T&rarr; ・id <br/> T&rarr;・(E)</TD></TR>
            </TABLE>>, pos="4,4!"];

    state9 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">9</TD></TR>
            <TR><TD PORT="text" bgcolor="red">E&rarr;T・ </TD></TR>
            </TABLE>>, pos="2,4.7!"];

    state5 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">5</TD></TR>
            <TR><TD PORT="text" bgcolor="red">T&rarr;id・ </TD></TR>
            </TABLE>>, pos="2,3.3!"];

    state1 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">1</TD></TR>
            <TR><TD PORT="text" bgcolor="red">S&rarr;E・$<br/>E&rarr;E・+T</TD></TR>
            </TABLE>>, pos="0,1.5!"];

    state7 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">7</TD></TR>
            <TR><TD PORT="text1" bgcolor="red">T&rarr;(E・) </TD></TR>
            <TR><TD PORT="text2" bgcolor="green">E&rarr; E・+T</TD></TR>
            </TABLE>>, pos="4,1.5!"];

    state3 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">3</TD></TR>
            <TR><TD PORT="text1" bgcolor="red">E&rarr;E+・T </TD></TR>
            <TR><TD PORT="text2" bgcolor="green">T&rarr;・id <br/> T&rarr;・(E) </TD></TR>
            </TABLE>>, pos="2,1.5!"];

    state2 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">2</TD></TR>
            <TR><TD PORT="text" bgcolor="red">S&rarr;E$・ </TD></TR>
            </TABLE>>, pos="0,0!"];

    state8 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">8</TD></TR>
            <TR><TD PORT="text" bgcolor="red">T&rarr;(E)・ </TD></TR>
            </TABLE>>, pos="4,0!"];

    state4 [label=<
            <TABLE ALIGN="LEFT" BORDER="0" CELLBORDER="1" CELLSPACING="0">
            <TR><TD PORT="title" bgcolor="yellow">4</TD></TR>
            <TR><TD PORT="text" bgcolor="red">E&rarr;E+T・ </TD></TR>
            </TABLE>>, pos="2,0!"];

    state0:s -> state1:n [xlabel="E"]
    state0 -> state9 [xlabel="T"]
    state0:e -> state5:w [xlabel="id"]
    state0 -> state6 [xlabel="("]

    state1:s -> state2:n [xlabel="$"]
    state1:title:e -> state3:title:w [xlabel="+"]

    state3:s -> state4:n [xlabel="T"]
    state3:n -> state5:s [xlabel="id"]
    state3:title:e -> state6 [xlabel="("]

    state6:s -> state7:n [xlabel="E"]
    state6 -> state9 [xlabel="T"]
    state6 -> state5 [xlabel="id"]
    state6 -> state6 [xlabel="("]

    state7:text2:w -> state3:text2:e [xlabel="+"]
    state7:s -> state8:n [xlabel=")"]
}