Я хочу использовать graphviz для генерации дерева структур, типа слева направо (пожалуйста, игнорируйте цвета):
Я пришелк выводу, что мне нужно использовать невидимые узлы, чтобы добиться этого, мой текущий код выглядит так:
digraph G {
node [ shape="box", width = 2, height = 1, fixedsize=true];
edge [arrowhead=none];
nodesep = 1;
ranksep=0.05;
splines = ortho;
rankdir = LR;
A1 [ shape="box", width = 2, height = 1, fixedsize=true];
B1 [ shape="box", width = 2, height = 1, fixedsize=true];
B2 [ shape="box", width = 2, height = 1, fixedsize=true];
B3 [ shape="box", width = 2, height = 1, fixedsize=true];
B4 [ shape="box", width = 2, height = 1, fixedsize=true];
B5 [ shape="box", width = 2, height = 1, fixedsize=true];
B6 [ shape="box", width = 2, height = 1, fixedsize=true];
W0 [ shape="circle", width = 0, height = 0, fixedsize=true, label=""];
W1 [ shape="circle", width = 0, height = 0, fixedsize=true, label=""];
W2 [ shape="circle", width = 0, height = 0, fixedsize=true, label=""];
W3 [ shape="circle", width = 0, height = 0, fixedsize=true, label=""];
W4 [ shape="circle", width = 0, height = 0, fixedsize=true, label=""];
W5 [ shape="circle", width = 0, height = 0, fixedsize=true, label=""];
W6 [ shape="circle", width = 0, height = 0, fixedsize=true, label=""];
subgraph {
A1 -> W0
W0 -> W3
W3 -> W2
W2 -> W1
W0 -> W4
W4 -> W5
W5 -> W6
W1 -> B1
W2 -> B2
W3 -> B3
W4 -> B4
W5 -> B5
W6 -> B6
{rank = same; A1;}
{rank = same; B1; B2; B3; B4; B5; B6;}
{rank = same; W0; W1; W2; W3; W4; W5; W6;}
}
}
И, используя точечный движок, я получаю:
Мои вопросы:
Могу ли я заставить определенные узлы занять центральную позицию (A1)?
Могу ли я заставить ребра соединяться с определенными местами на границе формы узла (например: в центре слева)?
Может быть, есть лучший способ получить такую древовидную структуру, которая будет иметь центр узлов (я должен учитывать, что следующие слои дерева могут быть довольно сложными)