2012-08-18 3 views
12

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

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

+0

Вы почти хотите написать свой собственный механизм компоновки для DOT, что не является тривиальным. Могут быть другие способы добиться этого, возможно, поиграть с ключевым словом подкласса «кластер» (например, subgraph clusterfoo {...}). Это может помочь, если вы укажете, почему вы хотите, чтобы они перекрывались, что вы пытаетесь представить? –

+0

Да, эти перекрывающиеся узлы похожи на «кластеры», и на моем графике я хочу показать много таких кластеров. Каждый набор перекрывающихся узлов принадлежит к группе, и в моей визуализации стандартно показывать их как перекрывающиеся. Итак, я хотел достичь этого – assassin

+0

Я думал, что цель «точка» заключалась в том, чтобы избежать перекрытия краев и узлов? – ninjalj

ответ

3

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

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

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

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

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

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

1

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