Заставить два узла занять один и тот же ранг в Graphviz? - PullRequest
6 голосов
/ 23 сентября 2011

Используя ruby-graphviz, я создал график, который выглядит следующим образом (граница добавлена, чтобы подчеркнуть границы рендеринга):

Before

Что я действительно хочу, так это чтобы А и К выстраивались вместе вверху (или слева, если rankdir = "LR"). Поэтому я добавил невидимый узел (назовем его X) и добавил невидимые ребра из X в A и K. И вот что я получил:

After

X, XA и XK не имеют меток, а стиль установлен в 'invis'. X имеет высоту, ширину и поле, равные 0, а fixedsize - значение true. Для XA и XK minlen, len и penwidth установлены в 0.

Но наверху все еще есть пустое место. Есть ли способ избавиться от этого, если не считать обрезку по факту?

1 Ответ

4 голосов
/ 23 сентября 2011

Вам не нужны невидимые узлы для достижения этого.

Это точечный синтаксис для принудительного определения одинакового ранга для двух узлов:

{rank=same; A; K;}

Это называется subgraph .

Я не знаю ruby-graphviz, я не уверен, как создать подграф - но на github есть пример :

c2 = g.subgraph { |c|
  c[:rank => "same"]
  c.mysite[:label => "\nexample.com\n ", :shape => "component", :fontname => "Arial"]
  c.dotgraph[:label => "\ndotgraph.net\n ", :shape => "component", :fontname => "Arial"]
}
...