По умолчанию в Graphviz метки краев размещаются справа от края. Я ищу способ разместить ярлыки НАД краем, по центру края. (Это все еще будет читаться, потому что я меняю цвет края).
Любые идеи?
По умолчанию в Graphviz метки краев размещаются справа от края. Я ищу способ разместить ярлыки НАД краем, по центру края. (Это все еще будет читаться, потому что я меняю цвет края).
Любые идеи?
Если это была этикетка с надписью или задняя этикетка, вы можете попробовать установить labeldistance
на ноль, чтобы этикетка была нарисована на краю, но, насколько я понимаю, вы имеете в виду этикетку края (ту, которая находится посередине края). В документации четко указано, что labeldistance
влияет только на ярлыки хедлайнеров и тайлэблей, но вы можете попытать счастья.
Еще одна вещь, которую вы, возможно, захотите попробовать, - это сделать прозрачный промежуточный узел с меткой на нем. Это может выглядеть так, как будто вы хотите ... Но если вы сильно полагаетесь на алгоритм размещения узлов, создание этих «искусственных» узлов может оказаться неприемлемым. В таком случае я рекомендую вам присоединиться к разработчикам graphviz и добавить нужную функцию;) Серьезно, это очень приятно.
Если найдете другое решение, опубликуйте его. В ближайшем будущем я столкнусь с аналогичной проблемой.
Попробуйте добавить несколько пробелов после ярлыка. Таким образом вы избегаете наложения стрелки на краю, поскольку метки graphviz выровнены по правому краю. Это не изящное решение, и мне бы хотелось увидеть правильное выравнивание меток, но это может решить вашу проблему.
Основываясь на двух предыдущих ответах, вот мое решение с использованием _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];
}