GraphViz - Как получить подграф слева направо, когда основной график сверху вниз?
У меня есть такой графический файл:
digraph {
"Step1" -> "Step2" -> "Step3";
subgraph step2detail {
"Step2" -> "note1";
"Step2" -> "note2";
"Step2" -> "note3";
"Step2" -> "note4";
rankdir=TB
}
}
Я хочу, чтобы подграф step2detail отклонялся вправо от "Step2".
Сейчас это выглядит так:
![enter image description here]()
Я хочу, чтобы Step1, Step2 и Step3 были вертикально друг под другом и в 1 столбце.
Ответы
Ответ 1
Трюк, чтобы получить график, который вы описали, заключается в использовании двух подграфов и ссылок от одного к другому. Невидимые ребра в "деталях" - это то, что выравнивает ноты.
digraph {
rankdir="LR";
subgraph steps {
rank="same";
"Step1" -> "Step2" -> "Step3";
}
subgraph details {
rank="same";
edge[style="invisible",dir="none"];
"note1" -> "note2" -> "note3" -> "note4";
}
"Step2" -> "note1";
"Step2" -> "note2";
"Step2" -> "note3";
"Step2" -> "note4";
}
Ответ 2
Сгруппировав узлы Step в кластеризованный подграф, получим следующее:
digraph {
subgraph cluster_0 {
color=invis;
"Step1" -> "Step2" -> "Step3";
}
subgraph cluster_1 {
color=invis;
"Step2" -> "note4";
"Step2" -> "note3";
"Step2" -> "note2";
"Step2" -> "note1";
}
}
![jNwrS.png]()
color=invis
удаляет границу, которая в противном случае была бы нарисована вокруг кластера
Ответ 3
Здесь так просто, как это получается - просто используйте атрибут group
, чтобы иметь графику, предпочитающую прямо
края:
digraph {
node[group=a, fontname="Arial", fontsize=14];
"Step1" -> "Step2" -> "Step3";
node[group=""];
"Step2" -> "note1";
"Step2" -> "note2";
"Step2" -> "note3";
"Step2" -> "note4";
}
![graphviz output]()
Ответ 4
rankdir не работает непосредственно в подграфе, но если вы добавите еще один набор фигурных скобок - как бы это ни называлось - rankdir работает:
digraph {
"Step1" -> "Step2" -> "Step3";
subgraph step2detail {
{
"Step2" -> "note1";
"Step2" -> "note2";
"Step2" -> "note3";
"Step2" -> "note4";
rankdir=TB
rank=same
}
}
}
![enter image description here]()
Ответ 5
Используйте команду: rankdir = LR;
digraph {
rankdir=LR;
"Step1" -> "Step2" -> "Step3";
subgraph step2detail {
"Step2" -> "note1";
"Step2" -> "note2";
"Step2" -> "note3";
"Step2" -> "note4";
rankdir=TB
}
}