У меня есть монстр дерева, который я пытаюсь визуализировать в графике, используя точку.В частности, я хочу использовать ортогональные ветви с общими ребрами, потому что некоторые из моих узлов имеют степень выхода ~ 20 (максимум, большинство ближе к 3-5).
То, что я хочу, это что-то вроде этого (простите за ужасную работу рисования):
Я много читал об использовании скрытых узлов, чтобы получить это, и у меня есть код
digraph {
splines="ortho"
rankdir="LR"
concentrate="true"
aa [shape=none, label="", width=0, height=0]
A
B
C
D
E
F
G
H
I
A -> aa [arrowhead="none"]
aa -> B
aa -> C
aa -> D
aa -> E
aa -> F
aa -> G
aa -> H
aa -> I
}
Но то, что я получаю, это:
Этот подход прекрасно работает с 3 или около того дочерними узлами, но ломаетвниз сразу в большем случае использования.Включение или выключение «концентрата» не оказывает большого влияния (очень небольшое улучшение).
Мой текущий план - отказаться от этого подхода и попробовать использовать узлы стиля «запись» и сложить их вручную, но этоБудет много работы, так что я надеюсь, что у кого-то есть лучшее предложение.Я немного гибок в том, как это выглядит, в основном я просто хочу визуализировать дерево с ~ 600 узлами в виде гигантского изображения, подобного этому
Я на самом деле генерирую это из python, в случае, если это имеет значение (Я бы хотел использовать другую библиотеку Python, если бы это помогло)
РЕДАКТИРОВАТЬ: Один болезненный хак, который я обнаружил, состоит в том, чтобы использовать поле ширины 0 и высоты Y вместо скрытого узла в одной точке, проблема вприходится суетиться с пробелами, и это все еще не совсем правильно.Это то, что у меня так далеко, но я оставляю это открытым, надеясь, что у кого-то есть идея получше:
digraph {
splines="ortho"
rankdir="LR"
nodesep=0.3
aa [shape=box, label="", width=0, height=5.6]
node [shape=box, height=0.5]
A
B
C
D
E
F
G
H
I
A -> aa [arrowhead="none"]
aa -> B [headport="w"]
aa -> C [headport="w"]
aa -> D [headport="w"]
aa -> E [headport="w"]
aa -> F [headport="w"]
aa -> G [headport="w"]
aa -> H [headport="w"]
aa -> I [headport="w"]
}
В этомВ этом случае у меня N = 8 узлов с высотой ч и разнесением с , поэтому я делаю высоту коробки (N-1)*(h+s)
, чтобы покрыть ее до середины ящиков сверху иснизу, но у меня свисает свисание, потому что я не могу должным образом контролировать точку хвоста.Не уверен, насколько хорошо это будет масштабироваться до большего дерева
РЕДАКТИРОВАТЬ 2: Как и ожидалось, это не работает вообще на более сложном графике, потому что я не могу узнать, как далеко друг от друга расположены поля справабудет (они разнесены, чтобы освободить место для других узлов)