2016-11-25 2 views
1

Как рисовать диагональные линии между двумя узлами в Graphviz (Dot Language).Как нарисовать диагональные ребра в Graphviz

Я хочу нарисовать следующую форму.

enter image description here

Я пробовал:

graph G { 
V[pos="0,0"]; 
N[pos="40,40!"]; 
V -- N [label="NSUBJ"] 
} 

Но он рисует ортогональные линии. Кроме того, я хочу нарисовать несколько подграфов с порядковым номером, как указано выше!

ответ

1

Можно использовать pos атрибут, но в этом случае вам придется использовать neato и установить pos для каждого узла:

graph G { 
    V [pos = "0,100"] 
    N [pos = "50,0"] 

    S [pos = "200,100"] 
    VPC [pos = "150,0"] 
    NPC [pos = "250,0"] 

    V -- N [label="NSUBJ"] 

    S -- VPC 
    S -- NPC 
} 

Затем используйте следующее:

neato -n -Tpng -o test.png test.gv 

Выход заключается в следующем:

neato with pos

Кроме того, это можно сделать, если линии диагонали использовать невидимые узлы:

graph G { 

    node [shape=plaintext] 
    labelloc="b" 
    pencolor=transparent 

    subgraph cluster_1 { 
     label="(1)" 

     S_1 [label="S"] 
     VPC_1 [label="VPC"] 
     NPC_1 [label="NPC"] 

     V_1 [label="V"] 
     invis_1 [style=invis] 
     N_1 [label="N"] 

     V_1 -- invis_1 [style=invis] 
     V_1 -- N_1 [label="NSUBJ"] 

     S_1 -- VPC_1 
     S_1 -- NPC_1 
    } 

    subgraph cluster_2 { 
     label="(2)" 

     VPC_2 [label="VPC"] 
     V_2_2 [label="V"] 
     NPC_2 [label="NPC"] 

     V_2 [label="V"] 
     invis_2 [style=invis] 
     N_2 [label="N"] 

     V_2 -- invis_2 [style=invis] 
     V_2 -- N_2 [label="COPCOMP"] 

     VPC_2 -- V_2_2 
     VPC_2 -- NPC_2 
    } 
} 

Выполнение этой последовательности команд производит следующий вывод:

ccomps -Cx test.gv | dot | gvpack -array_1 | neato -n2 -Tpng > test.png

graph output

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