在 graphviz 中添加页眉和页脚
Adding header and footer in graphviz
我有一个 gv 代码如下。我想在生成的图形中添加一些文本或图像作为页眉和页脚。
digraph testdot {
label=" Name: MY NAME \l Address: Address ...... \l ";
START_NODE [ shape=ellipse label= "START" ];
ERROR_NODE0 [ shape=box label= "Error0" ];
ERROR_NODE1 [ shape=box label= "Error1" ];
ERROR_NODE2 [ shape=box label= "Error2" ];
ERROR_NODE3 [ shape=box label= "Error3" ];
Statement_0 [ shape=diamond label= "if foo " ];
Statement_1 [ shape=diamond label= "if foo1" ];
Statement_2 [ shape=diamond label= "if foo2" ];
Statement_3 [ shape=diamond label= "if foo3" ];
START_NODE -> Statement_0;
Statement_0 -> Statement_1 [label= "No" ];
Statement_0 -> ERROR_NODE0 [label= "Yes" ];
Statement_1 -> Statement_2 [label= "No" ];
Statement_1 -> ERROR_NODE1 [label= "Yes" ];
Statement_2 -> Statement_3 [label= "No" ];
Statement_2 -> ERROR_NODE2 [label= "Yes" ];
Statement_3 -> Statement_4 [label= "No" ];
Statement_3 -> ERROR_NODE3 [label= "Yes" ];
}
下面是我希望如何输出的示例
如果使用 'dot' 完成此任务,点将不允许控制图形元素的位置。也就是说,如果您知道图形的结构,则可以使用子图、等级和隐藏边来做一些技巧。
这可能是您图表的解决方案:
digraph testdot {
subgraph clusterHeader {
margin=0
style="invis"
HEADER [shape="box" label="This is the header"];
}
subgraph clusterMain {
margin=0
style="invis"
START_NODE [ shape=ellipse label= "START" ];
ERROR_NODE0 [ shape=box label= "Error0" ];
ERROR_NODE1 [ shape=box label= "Error1" ];
ERROR_NODE2 [ shape=box label= "Error2" ];
ERROR_NODE3 [ shape=box label= "Error3" ];
Statement_0 [ shape=diamond label= "if foo " ];
Statement_1 [ shape=diamond label= "if foo1" ];
Statement_2 [ shape=diamond label= "if foo2" ];
Statement_3 [ shape=diamond label= "if foo3" ];
START_NODE -> Statement_0;
Statement_0 -> Statement_1 [label= "No" ];
Statement_0 -> ERROR_NODE0 [label= "Yes" ];
Statement_1 -> Statement_2 [label= "No" ];
Statement_1 -> ERROR_NODE1 [label= "Yes" ];
Statement_2 -> Statement_3 [label= "No" ];
Statement_2 -> ERROR_NODE2 [label= "Yes" ];
Statement_3 -> Statement_4 [label= "No" ];
Statement_3 -> ERROR_NODE3 [label= "Yes" ];
}
subgraph clusterFooter {
margin=0
style="invis"
LABEL_1 [shape="none" margin=0 label="NAME: My name\lAddress: 23 XYZ road"];
{rank="sink"; FOOTER [shape="box" label="Footer text goes here"];}
}
// Connecting the subgraps in order. Try to connect a bottom node of your main
// clusterMain to LABEL_1
HEADER->START_NODE [style=invis];
ERROR_NODE3->LABEL_1 [style=invis weight=0];
LABEL_1->FOOTER [style=invis weight=0];
}
我有一个 gv 代码如下。我想在生成的图形中添加一些文本或图像作为页眉和页脚。
digraph testdot {
label=" Name: MY NAME \l Address: Address ...... \l ";
START_NODE [ shape=ellipse label= "START" ];
ERROR_NODE0 [ shape=box label= "Error0" ];
ERROR_NODE1 [ shape=box label= "Error1" ];
ERROR_NODE2 [ shape=box label= "Error2" ];
ERROR_NODE3 [ shape=box label= "Error3" ];
Statement_0 [ shape=diamond label= "if foo " ];
Statement_1 [ shape=diamond label= "if foo1" ];
Statement_2 [ shape=diamond label= "if foo2" ];
Statement_3 [ shape=diamond label= "if foo3" ];
START_NODE -> Statement_0;
Statement_0 -> Statement_1 [label= "No" ];
Statement_0 -> ERROR_NODE0 [label= "Yes" ];
Statement_1 -> Statement_2 [label= "No" ];
Statement_1 -> ERROR_NODE1 [label= "Yes" ];
Statement_2 -> Statement_3 [label= "No" ];
Statement_2 -> ERROR_NODE2 [label= "Yes" ];
Statement_3 -> Statement_4 [label= "No" ];
Statement_3 -> ERROR_NODE3 [label= "Yes" ];
}
下面是我希望如何输出的示例
如果使用 'dot' 完成此任务,点将不允许控制图形元素的位置。也就是说,如果您知道图形的结构,则可以使用子图、等级和隐藏边来做一些技巧。
这可能是您图表的解决方案:
digraph testdot {
subgraph clusterHeader {
margin=0
style="invis"
HEADER [shape="box" label="This is the header"];
}
subgraph clusterMain {
margin=0
style="invis"
START_NODE [ shape=ellipse label= "START" ];
ERROR_NODE0 [ shape=box label= "Error0" ];
ERROR_NODE1 [ shape=box label= "Error1" ];
ERROR_NODE2 [ shape=box label= "Error2" ];
ERROR_NODE3 [ shape=box label= "Error3" ];
Statement_0 [ shape=diamond label= "if foo " ];
Statement_1 [ shape=diamond label= "if foo1" ];
Statement_2 [ shape=diamond label= "if foo2" ];
Statement_3 [ shape=diamond label= "if foo3" ];
START_NODE -> Statement_0;
Statement_0 -> Statement_1 [label= "No" ];
Statement_0 -> ERROR_NODE0 [label= "Yes" ];
Statement_1 -> Statement_2 [label= "No" ];
Statement_1 -> ERROR_NODE1 [label= "Yes" ];
Statement_2 -> Statement_3 [label= "No" ];
Statement_2 -> ERROR_NODE2 [label= "Yes" ];
Statement_3 -> Statement_4 [label= "No" ];
Statement_3 -> ERROR_NODE3 [label= "Yes" ];
}
subgraph clusterFooter {
margin=0
style="invis"
LABEL_1 [shape="none" margin=0 label="NAME: My name\lAddress: 23 XYZ road"];
{rank="sink"; FOOTER [shape="box" label="Footer text goes here"];}
}
// Connecting the subgraps in order. Try to connect a bottom node of your main
// clusterMain to LABEL_1
HEADER->START_NODE [style=invis];
ERROR_NODE3->LABEL_1 [style=invis weight=0];
LABEL_1->FOOTER [style=invis weight=0];
}