Я ищу способ выровнять отдельные узлы в графвизе по всему подграфу / кластеру.
В настоящее время я учу небольшую группу аналитиков использовать rmarkdown
и хочу разрешить им включать в свои документы простые графики и блок-схемы. Поэтому я использую DiagrammeR
(и viz.js
) для рендеринга диаграмм, написанных в dot
. Чтобы повысить популярность пользователей, я хочу минимизировать сложность, избегать HTML
и использовать raw dot
.
Наша проблема в том, что мы часто пытаемся выровнять узлы с подграфами / кластерами , содержащими несколько узлов, но мы не можем выровнять весь подграф с узлом. Выравнивание работает только с составляющими узлами внутри подграфа / кластера. (см. узлы C, D, E и G, T ниже)
Я пытался создать узел записи, используя GT [shape = record label="{G | T}"]
, но это не позволяет отдельнымстилизация двух узлов.
Я также пытался создать узел записи HTML, который допускает индивидуальное моделирование, но слишком сильно увеличивает сложность и требует, чтобы пользователи знали HTML.
Наконец, я попытался вставить невидимый узел в кластеры, чтобы «симулировать» центр, а затем использовать невидимый узел для выравнивания. К сожалению, это толкает G и T далеко друг от друга и не достигает желаемого эффекта.
digraph G {
graph [splines = false, ranksep = 0.2]
edge [style = "invis"]
node [shape = box, width = 7.5]
A B H
node [shape = circle, width = 1.5]
subgraph cluster_2 {
rank = same
C D E
}
subgraph cluster_1 {
G [shape = box]
T [shape = box]
}
A -> B
G -> T
B -> {C D E G}
{C D E T} -> H
}
Вывод дает следующее:
На рисунке выше подграф, содержащий G и T не выровнен с подграфом, содержащим C, D, E .
Есть ли способ выровнять по вертикали центры двух подграфов?