У меня есть график, который можно обобщить на английском языке следующим образом:
A -> [B -> C -> D] -> E
B -> A
E -> B
Где квадратные скобки указывают на подграф с рамкой вокруг него.
Я реализовал его вgraphViz / dot выглядит следующим образом:
digraph {
rankdir = LR
graph [overlap = true, fontname = Helvetica]
A [shape="box", style="dashed", label="Alab"]
subgraph clusterx {
node [shape="box"]
B [label="Blab"]
C [label="Clab"]
D [label="Dlab"]
B -> C -> D
label = "Subgraph Box Label";
labeljust = "l";
}
E [shape="box", style="dashed", label="Elab"]
A -> B [label = " ", headport="nw", tailport="ne"]
B -> A [label = " ", headport="se", tailport="sw"]
D -> E
E -> B [tailport="s", headport="s"]
}
Это корректно отображается, но я хотел бы исправить несколько визуальных вещей.
- Я хочу, чтобы между
A
и подграфом было больше места и меньше места между узлами подграфа. - Я хочу, чтобы
E
находился в том же вертикальном положении, что идругие узлы. Я хочу, чтобы кромка D -> E
была плоской линией. - Я хочу, чтобы кромка
E -> B
изгибалась более эстетично. Я бы предпочел, чтобы он вышел из порта 's' E
, повернул влево на 90 градусов, продолжил движение влево, пока не достигнет узла B
, а затем повернул на 90 градусов вверх и ввел 's'порт B
перпендикулярно. Я полагаю, что это происходит из-за способа, которым graphViz расставляет точки сплайна - я думаю, что я действительно хочу сделать, это немного перетащить каждую промежуточную точку сплайна так, чтобы левая часть края была плоской.
Я пытался настроить параметры nodesep
и ranksep
, чтобы решить первые две проблемы, и не смог последовательно понять, почему вносимые мной изменения приводят к изменениям, которые они делают. Я вообще не смог решить # 3.
Кроме того, я использую diagrammeR в R для рендеринга этого в документы PDF и HTML, поэтому любой ответ здесь должен быть независимым от формата вывода. В случае, если это имеет значение.
Любой совет? Я попытался просмотреть документацию GraphViz безрезультатно, и я не могу найти работающие примеры, которые показывают эти проблемы.