Как заставить узлы перекрываться на указанную величину на языке точек (graphviz)

Я новичок в использовании точечного макета в graphviz. Я пытаюсь указать график на языке точек, и я хочу, чтобы определенные наборы узлов были принудительно перекрыты на определенную величину (скажем, 70% их площади или что-то с этим эффектом). Я знаю, что могу принудительно расположить узлы по осям x и y и, таким образом, вызвать перекрытие, но в этом случае я пишу программу на C #, которая при определенных входных данных выводит соответствующий точечный скрипт для графа, поэтому количество узлов и т. Д. не жестко запрограммирован, поэтому я не могу придумать схему для жесткого кодирования позиций x и y всех узлов. Любая помощь в этом будет принята с благодарностью!

Большое спасибо!


person assassin    schedule 18.08.2012    source источник
comment
Вы почти хотите написать свой собственный механизм компоновки для DOT, что нетривиально. Однако могут быть другие способы добиться этого, возможно, поиграйте с ключевым словом subgraph cluster (например, subgraph clusterfoo {...}). Может помочь, если вы укажете, почему вы хотите, чтобы они пересекались, что вы пытаетесь изобразить?   -  person Daniel Kinsman    schedule 29.08.2012
comment
да, эти перекрывающиеся узлы похожи на «кластеры», и на моем графике я хочу показать много таких кластеров. Каждый набор перекрывающихся узлов принадлежит группе, и в моей визуализации стандартно показывать их как перекрывающиеся. Итак, я хотел добиться этого   -  person assassin    schedule 06.09.2012
comment
Я думал, что суть dot в том, чтобы избежать перекрытия краев и узлов?   -  person ninjalj    schedule 06.09.2012


Ответы (2)


Как отмечает @ninjalj, одна из замечательных особенностей graphviz заключается в том, что он позволяет вам красиво представлять графики и избавляться от «недостатков» или «недостатков», таких как перекрытия, например используя такие атрибуты, как overlap и _ 2_.

Однако вы указываете, что:

Я знаю, что могу принудительно расположить узлы по осям x и y и, таким образом, вызвать перекрытие, но в этом случае я пишу программу на C #, которая при определенных входных данных выводит соответствующий точечный скрипт для графа, поэтому количество узлов и т. Д. не жестко запрограммирован, поэтому я не могу придумать схему для жесткого кодирования позиций x и y всех узлов.

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

Я не говорю, что это просто, однако это не невозможно, и необходимая логика, конечно, во многом зависит от цели вашего приложения.

Но прежде чем приступить к реализации, я думаю, вам следует взглянуть на cluster функциональность, уже встроенную в graphviz. (на что также указывает @Daniel Kinsman) и подумайте, действительно ли стоит прилагать дополнительные усилия для реализации пользовательской реализации механизма макета DOT или вам может хватить функциональности кластера.

person Lasse Christiansen    schedule 06.09.2012

Это может быть полезно: вы можете использовать формат вывода graphviz dot , который выводит узлы и их явное расположение. Затем вы можете прочитать его и изменить их размер. Трудно сказать, поможет ли это вашей конкретной потребности без демонстрационных изображений того, что именно вы хотите. Также это может быть не лучшим решением. Просто подумал, что добавлю его в арсенал инструментов, которыми можно пользоваться.

person Realz Slaw    schedule 12.09.2012