Graphviz dot-file сумасшедшее позиционирование края - PullRequest
0 голосов
/ 13 января 2019

У меня проблема с расположением краев в моем точечном файле. enter image description here

В файле точек я использовал contrainsts = false, чтобы исключить ребра m и l из ранжирования, и дал ему немного заголовка и порта (с pygraphviz: headport='e', tailport='e'. Они получили сумасшедшую форму. Я хочу, чтобы они были справа от узлов.

Это точечный файл:

strict digraph "" {
graph [bb="0,0,717.03,767.02",
    edges="{'arrowsize': '4.0'}",
    rankdir=LR,
    size="100,100",
];
cen0
   [height=0.5,
    label=a,
    rank=0,
    ];
3    [
    label=b,
    rank=1,
    ];
cen0 -> 3
   [label=z,
    pos=e];
0
   [label=c,
    rank=1,
    ];
cen0 -> 0
   [label=z,
    pos=e];
cor22
   [label=d,
    rank=2,
    ];
3 -> cor22
   [label=2,
    pos=e];
con23
   [label=e,
    rank=2,
    ];
3 -> con23
   [label=1,
    ];
cor2
   [label=g,
    rank=2,
    ];
0 -> cor2
   [label=4];
con4
   [label=h,
    rank=2,
    ];
0 -> con4
   [label=3];
1
   [label="Why I can't delete the attribute 'width' 
from this node?:
   Warning: Unable to reclaim box space in spline 
routing for edge \"con4\" ->\"con23\". Something is 
probably seriously wrong.
",
    rank=2,
    width=2.5731];
0 -> 1
   [label=k];
cor2:e -> cor22:e
   [constraint=false,
   rank=3
    label=l];
con4:e -> con23:e
   [constraint=false,
    rank=3
    label="Why this way?"];
}

Мне также стало интересно, почему появляется это предупреждение, когда я удаляю последний атрибут "width". Как я мог получить мои края в пути, я ожидал?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Отсутствует атрибут splines=curved, добавленный в мой код GraphViz дает: enter image description here

0 голосов
/ 13 января 2019

Это, вероятно, автоматически сгенерированный продукт с большим «шумом» - я позволил себе почти полностью переписать код, чтобы мне было легче работать и тестировать, а также сосредоточиться на основных моментах. Вы добавите в него то, что важно для вас, и узнаете, не нарушает ли что-то из этого.

При большом количестве проб и ошибок я нашел четыре основных изменения:

  • Четыре узла третьего уровня должны быть в одном ранге (rank = 3 не помогает)
  • Их нужно соединить в нужном порядке невидимыми краями
  • Края между этими узлами должны поддерживать правильный иерархический уровень со стрелкой, направленной назад
  • xlabels вместо labels необходимо использовать для краев

Так вот мой в значительной степени отредактированный код

digraph so 
{
    rankdir = LR;
    // edge[ arrowsize = 4 ];           // you don't want that

    cen0[ label = "a" ];
    3   [ label = "b" ];
    0   [ label = "c" ];
    cen0 -> { 3 0 }[ label = "z" ];

    cor22[ label = "d" ];
    con23[ label = "e" ];
    3 -> cor22[ label = "2" ];
    3 -> con23[ label = "1" ];

    cor2[ label = "g" ];
    con4[ label = "h" ];
    1   [ label = "Why I can't delete the attribute 'width' from this node?:\nWarning: Unable to reclaim box space in spline routing for edge \"con4\" ->\"con23\".\nSomething is probably seriously wrong.\n---  Width attribute not present here!  ---" ];
    0 -> cor2[ label = "4"];
    0 -> con4[ label = "3" ];
    0 -> 1[ label = "k" ];

    {rank = same; cor22 con23 cor2 con4 1 }
    cor22 -> con23 -> cor2 -> con4[ style = invis ]
    cor22:e -> cor2:e[ dir = back, xlabel = "   l" ];
    con23:e -> con4:e[ dir = back, xlabel = "   Is this better?" ];
}

и вот результат:

enter image description here

...