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→ ・E$</TD></TR>
<TR><TD PORT="text2" bgcolor="green">E→ ・E+T <br/> E→・T </TD></TR>
<TR><TD PORT="text3" bgcolor="green">T→ ・id <br/> T→・(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→(・E) </TD></TR>
<TR><TD PORT="text2" bgcolor="green">E→ ・E+T <br/> E→・T </TD></TR>
<TR><TD PORT="text3" bgcolor="green">T→ ・id <br/> T→・(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→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→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→E・$<br/>E→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→(E・) </TD></TR>
<TR><TD PORT="text2" bgcolor="green">E→ 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→E+・T </TD></TR>
<TR><TD PORT="text2" bgcolor="green">T→・id <br/> T→・(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→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→(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→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→ ・E$</TD></TR>
<TR><TD PORT="text2" bgcolor="green">E→ ・E+T <br/> E→・T </TD></TR>
<TR><TD PORT="text3" bgcolor="green">T→ ・id <br/> T→・(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→(・E) </TD></TR>
<TR><TD PORT="text2" bgcolor="green">E→ ・E+T <br/> E→・T </TD></TR>
<TR><TD PORT="text3" bgcolor="green">T→ ・id <br/> T→・(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→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→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→E・$<br/>E→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→(E・) </TD></TR>
<TR><TD PORT="text2" bgcolor="green">E→ 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→E+・T </TD></TR>
<TR><TD PORT="text2" bgcolor="green">T→・id <br/> T→・(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→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→(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→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=")"]
}