Graphviz: разместить метку края на другой стороне - PullRequest
19 голосов
/ 10 августа 2010

Это может быть связано с Как разместить метки ребер на ребре в графе : у меня есть следующий график, который я визуализирую с помощью команды dot -Teps g.dot > g.eps:

graph triple {
    node [shape=box]; User; Object; Tag;
    node [shape=diamond,style=filled]; Triple;
    {
        User -- Triple [label = "1"];
        Object -- Triple [label = "1"];
    }
    {
        rank=same;
        User;
        Object;
    }
    Triple -- Tag [label="n"];
}

Iхотелось бы, чтобы результат был более симметричным, поместив метку между пользователем и тройкой в ​​левой части графика.

Ответы [ 2 ]

25 голосов
/ 08 января 2011

Ручное размещение меток не может быть выполнено с помощью Graphviz.

Однако вы можете использовать атрибуты headlabel, labeldistance и labelangle:

graph triple {
node [shape=box]; User; Object; Tag;
node [shape=diamond,style=filled]; Triple;
    {
        User   -- Triple [headlabel = "1", labeldistance=2.5, labelangle=20];
        Object -- Triple [headlabel = "1", labeldistance=2.5, labelangle=-20];
    }
    {
        rank=same;
        User;
        Object;
    }
    Triple -- Tag [label="n"];
}

Выход:

graphviz output

6 голосов
/ 13 января 2011

А вот второй обходной путь с использованием splines=false и двойных ребер:

graph {
splines=false;
node [shape=box]; User; Object; Tag;
node [shape=diamond,style=filled]; Triple;
    {
        User   -- Triple [label = "1"];
        User   -- Triple [label = ""];
        Object -- Triple [label = ""];
        Object -- Triple [label = "1"];
    }
    {
        rank=same;
        User;
        Object;
    }
    Triple -- Tag [label="n"];
}

Вывод:

alt text

...