Заполнение границ кластера и узлов при использовании Graphviz и Neato - PullRequest
4 голосов
/ 26 марта 2012

Я хочу создать следующий график в Graphviz:

Desired layout

По причинам, объясненным здесь , это:

digraph
{
   layout=dot;
   rankdir="LR";
   overlap = true;
   node[shape=record, height="0.4", width="0.4"];
   edge[dir=none];

   A; B; C; D; E; F; G; H; I;

   A -> B -> C;
   D -> E -> F;
   G -> H -> I;
   edge[constraint=false];
   A -> D -> G;

   subgraph clusterX
   {
      label="Cluster 1";
      A; B;
   }

   subgraph clusterY
   {
      label="Cluster 2";
      E; F; H; I;
   }

}

выдает это:

Not desired layout

После некоторая тщательная настройка порядка появления узлов :

   F; E; I; H; D; G; A; B; C;

Я получаю правильный результат.

Хотя это работает, я хотел бы получить более непосредственный контроль над размещением узлов, поэтому я попытался переключиться на neato, чтобы можно было принудительно определить местоположение узлов с помощью pos:

graph g
{
   layout=neato;
   node[shape=record, height="0.4", width="0.4"];
   edge[dir=none];

   A [pos="1,3!"];
   B [pos="2,3!"];
   C [pos="3,3!"];
   D [pos="1,2!"];
   E [pos="2,2!"];
   F [pos="3,2!"];
   G [pos="1,1!"];
   H [pos="2,1!"];
   I [pos="3,1!"];

   A -- B -- C;
   D -- E -- F;
   G -- H -- I;
   A -- D -- G;

   subgraph clusterX
   {
      label="Cluster 1";
      A;
      B;
   }

   subgraph clusterY
   {
      label="Cluster 2";
      E; F; H; I;
   }
}

Этодает следующий результат:

enter image description here

Как можно получить аккуратно добавить дополнение между границами кластера и узлами внутри кластера (так же, как это делает точка)?

1 Ответ

4 голосов
/ 27 марта 2012

Ненавижу быть вечеринкой, но я не думаю, что подход "аккуратно с фиксированными позициями и кластерами" будет успешным.

Поддержка кластера зависит от механизма компоновки - не все механизмы поддерживают его в одинаковой степени :

Обратите внимание, что как хорошие, так и плохие кластерные подграфы не являются частью DOT язык, но только синтаксическая конвенция, которой придерживаются некоторые из Компоновка двигателей.

Neato, по-видимому, не является частью двигателей, поддерживающих кластеры , и хотя fdp поддерживает neato-подобный макет, он не поддерживает фиксированные позиции .

В приведенных выше ссылках на форумы ERG предлагает в какой-то момент использовать сценарий gvpr для достижения этой цели - возможно, это не решение, которое вы имели в виду.

Кстати, граф не должен быть ориентированным графом, я получаю предупреждения и заменяю все -> на --.

...