2015-01-14 5 views
3

У меня есть код gv, как показано ниже. Я хочу добавить текст или изображение в виде верхнего и нижнего колонтитула в сгенерированный граф.Добавление верхнего и нижнего колонтитула в graphviz

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

Ниже приведен пример того, как я хочу, вывод как

Below is an example of how I want the output as

ответ

3

При использовании «точка» для решения этой задачи, точка не позволяет контролировать положение элементов вашего графика. Тем не менее, если вы знаете структуру своего графика, вы можете сделать некоторые трюки, используя подграфы, ранги и скрытые края.

Это было бы возможным решением для графа:

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

} 
+2

дополнительно вы можете использовать HTML-таблицы в качестве узла этикетки, см [HTML-Like Labels] (http://www.graphviz.org/doc/ Информация/shapes.html # HTML) – stefan

Смежные вопросы