Graphviz: ориентация кромки к одному узлу и от него - PullRequest
2 голосов
/ 30 марта 2020

Я создаю несколько многоуровневых SEM-графиков и сталкиваюсь с небольшой проблемой. Предполагается, что скрытая переменная в нижней части графика (помеченная как "WF") имеет двуглавое ребро, но ребро должно быть go под узлом. Обратите внимание на правильную ориентацию самого верхнего узла. Кажется и легко исправить, но я могу найти это. Заранее спасибо. (Кстати, я предоставил только фрагмент оригинальной модели, но этого достаточно для этой цели.)

digraph stackex {

    {rank=min;
    bf [shape=ellipse]
    bf:nw -> bf:ne [dir = both]}

    {node[shape=square]
      bf -> i1 
      i1[label=X1]
      i1 -> wf [dir=back]}

    {wf [shape=ellipse]
    wf:sw -> wf:se [dir = both]}
}

И вот что он производит:

Graphviz Plot

Двуглавая стрелка должна go под узлом с пометкой "WF".

1 Ответ

0 голосов
/ 30 марта 2020

Исходя из экспериментов, кажется, что единственный способ заставить

wf:sw -> wf:se [dir = both]

делать то, что вы хотите, это добавить

graph [rankdir=TB]

К сожалению, rankdir влияет на весь график (не только на подграф или кластер). Таким образом, вы можете исправить один l oop, но вы сломаете другой.
Единственный способ, которым я нашел для достижения sh, ваша цель - вручную изменить pos нарушающего края (сплайн). Это:

digraph stackex {
    graph [bb="0,0,82.583,216"];
    node [label="\N",
        shape=square
    ];
    bf  [height=0.5,
        pos="41.292,162",
        shape=ellipse,
        width=0.75];
    bf:nw -> bf:ne  [dir=both,
        pos="s,26.292,177 e,56.292,177 22.277,186.17 18.135,200.16 21.792,216 41.292,216 60.792,216 64.448,200.16 60.306,186.17"];
    i1  [height=0.5,
        label=X1,
        pos="41.292,90",
        width=0.5];
    bf -> i1    [pos="e,41.292,108.1 41.292,143.7 41.292,135.98 41.292,126.71 41.292,118.11"];
    wf  [height=0.5,
        pos="41.292,18",
        shape=ellipse,
        width=0.75];
    i1 -> wf    [dir=back,
        pos="s,41.292,71.697 41.292,61.665 41.292,53.054 41.292,43.791 41.292,36.104"];
    wf:se -> wf:sw  [dir=both,
        pos="s,56.292,3 e,26.292,3 
65.002,8.3185 
92.908,0.389 
88.823,-20 
41.292,-20 
-6.2395,-20 
-10.324,0.389 
17.582,8.3185"];
}

И эта команда neato -n2 -Tpng doubleheaded3.fixed.dot> doubleheaded3.fixed.png Дает это: enter image description here

В общем, я бы предложил язык pic / gpic / dpi c. Низкоуровневый, но, вероятно, более простой в использовании в долгосрочной перспективе.

...