Как вертикально выровнять узел по центру кластера? - PullRequest
0 голосов
/ 07 ноября 2019

Я ищу способ выровнять отдельные узлы в графвизе по всему подграфу / кластеру.

В настоящее время я учу небольшую группу аналитиков использовать rmarkdown и хочу разрешить им включать в свои документы простые графики и блок-схемы. Поэтому я использую DiagrammeRviz.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 .

Есть ли способ выровнять по вертикали центры двух подграфов?

...