Как разместить метки на ребре в graphviz

По умолчанию в Graphviz метки краев размещаются справа от края. Я ищу способ разместить ярлыки НАД краем, по центру края. (Это все еще будет читаться, потому что я меняю цвет края).

Любые идеи?


person naught101    schedule 28.02.2010    source источник


Ответы (3)


Если это была этикетка с надписью или задняя этикетка, вы можете попробовать установить labeldistance на ноль, чтобы этикетка была нарисована на краю, но, насколько я понимаю, вы имеете в виду этикетку края (ту, которая находится посередине края). В документации четко указано, что labeldistance влияет только на ярлыки хедлайнеров и тайлэблей, но вы можете попытать счастья.

Еще одна вещь, которую вы, возможно, захотите попробовать, - это сделать прозрачный промежуточный узел с меткой на нем. Это может выглядеть так, как будто вы хотите ... Но если вы сильно полагаетесь на алгоритм размещения узлов, создание этих «искусственных» узлов может оказаться неприемлемым. В таком случае я рекомендую вам присоединиться к разработчикам graphviz и добавить нужную функцию;) Серьезно, это очень приятно.

Если найдете другое решение, опубликуйте его. В ближайшем будущем я столкнусь с аналогичной проблемой.

person Paweł Polewicz    schedule 05.11.2010
comment
Да, похоже, на данный момент это все. Я подумаю о том, чтобы внести свой вклад в graphviz, но, как и вы, моя проблема не будет проблемой как минимум еще несколько месяцев. - person naught101; 29.11.2010
comment
Кто-нибудь когда-нибудь добавлял функцию выравнивания меток по краям? Я новичок в graphviz, только что установил 2.38 и хотел бы это сделать. - person Riggster; 02.12.2019

Попробуйте добавить несколько пробелов после ярлыка. Таким образом вы избегаете наложения стрелки на краю, поскольку метки graphviz выровнены по правому краю. Это не изящное решение, и мне бы хотелось увидеть правильное выравнивание меток, но это может решить вашу проблему.

person Rohan Mukherjee    schedule 11.05.2016

Основываясь на двух предыдущих ответах, вот мое решение с использованием _1 _ / _ 2_, прозрачного края и пустых пространств.

Если между двумя узлами есть только одно ребро, используйте прозрачное ребро. Ниже приведен пример результата.

digraph G {
    rankdir=BT;
    A -> B [label="               ", minlen=3, headlabel="A overlay text\non edge", labeldistance=8];
    B -> A [color=white];
}

оверлей

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

digraph G {
    rankdir=BT;
    A -> B [label="                    ", minlen=3, headlabel="An overlay\ntext", labeldistance=6];
    B -> A [headlabel="       B to A", labeldistance=4];
}

overlay2

person alijandro    schedule 27.05.2021