В графе DOT, как переместить кластер и предотвратить ненужное пересечение линий?

Я использую Graphviz для создания этой диаграммы: Что я получаю

Выход не оптимальный. Линия XZ без необходимости пересекает линию XY; Я ожидаю, что Y будет выше X. Я пробовал много вариантов из документа, но безрезультатно. Вот какой результат я ожидаю: Что я хочу

Как я могу заставить Graphviz создавать более оптимизированные диаграммы?

ПРИМЕЧАНИЕ. Я хотел бы автоматизировать создание подобных диаграмм, поэтому решения, характерные для описанного выше сценария (например, невидимые ребра из X0 -> Y1, Y11 -> X03 или еще что-то), не помогут. Я ищу способ, чтобы в целом доверять таким вещам, как:

  • А-Х-В будет прямой линией.
  • Y будет выше A-X-B, если он не взаимодействует с Z.
  • X->Y->X не будет без необходимости вызывать большие промежутки между узлами X.

Содержимое точечного файла:

digraph G {
  rankdir=LR

  subgraph cluster_x {
    node [style=filled,color=green]
    "X.0" -> "X.0.1" -> "X.0.2" -> "X.0.3" -> "X.0.4"
  }

  subgraph cluster_y {
    node [style=filled,color=lightblue]
    "Y.1" -> "Y.1.1"
  }

  subgraph cluster_z {
    node [style=filled,color=crimson]
    "Z.1" -> "Z.1.1"
    "Z.2"
  }

  A -> "X.0"
  "X.0.1" -> "Y.1"
  "X.0.1" -> "Z.2"
  "X.0.2" -> "Z.1"
  "Y.1.1" -> "X.0.2"
  "Z.1.1" -> "X.0.4"
  "Z.2" -> "Z.1.1"
  "X.0.4" -> B
}

person Golly    schedule 17.08.2013    source источник


Ответы (1)


Это нетривиально. Мы открыты для добровольцев, которые помогут с алгоритмами компоновки. Мы с Эмденом Ганснером начали полную переработку dot (с более чистыми структурами данных для подграфов и длинных ребер и с использованием просеивания для минкроссинга), но не закончили. Мы написали новый cpde задания уровня, который, я думаю, Эмден взломал в старом движке точечной компоновки. это, вероятно, несколько месяцев усилий, если кто-то хочет поднять его и пойти дальше. Свяжитесь с нами на graphviz.org

В общем, машины ограничения (например, точка) могут быть немного хрупкими. Либо они получают правильное решение сами по себе, либо, может быть, вы можете добавить несколько твиков, но как только вход меняется хоть немного, твики ломают все, и это никуда не годится. Из-за последовательного характера проходов макета трудно, например, отдать предпочтение назначению другого уровня, чтобы впоследствии уменьшить количество пересечений. На конференции по рисованию графиков может быть какая-то работа, если кто-то захочет ее найти и реализовать.

Стивен Норт

person north at graphviz    schedule 20.08.2013
comment
Спасибо, Стивен. Продолжайте в том же духе, Graphviz — блестящий инструмент. - person Golly; 26.08.2013