Как указывает @ninjalj, одна из опрятных вещей о графике заключается в том, что он позволяет вам красиво представлять графики и избавляться от «недостатков» или «несовершенств», например, перекрытий - например, с использованием таких атрибутов, как overlap
и overlap_scaling
.
Однако, вы указываете, что:
Я знаю, что могу заставить х и у позиции узлов и, таким образом, вызвать перекрытие, но в данном случае я пишу # программа C, что при определенных входных косами выведите соответствующий точечный скрипт для графика, поэтому количество узлов и т. д. не является жестко запрограммированным, и поэтому я не могу придумать схему жестких кодов x и y позиций всех узлов.
Итак, как вы видите, вы знаете, что, когда вы получаете определенный ввод, вы собираетесь сгенерировать определенный график - другими словами, вы знаете количество узлов (и кластеры) в зависимости от ввода. Это заставляет меня думать, что предложение Даниэля Кинсмана может стать для вас способом - то есть реализовать свой собственный механизм компоновки DOT для этой конкретной цели.
Я не говорю, что это просто, однако это невозможно, и логика, конечно же, сильно зависит от цели вашего приложения.
Но прежде чем выполнять какую-либо реализацию, я думаю, вы должны взглянуть на cluster
functionality, уже встроенный в graphviz (который также указывает @Daniel Kinsman), и подумайте, действительно ли это стоит дополнительных усилий, чтобы выполнить собственный макет DOT или если возможности кластера могут быть достаточными для вас.
Вы почти хотите написать свой собственный механизм компоновки для DOT, что не является тривиальным. Могут быть другие способы добиться этого, возможно, поиграть с ключевым словом подкласса «кластер» (например, subgraph clusterfoo {...}). Это может помочь, если вы укажете, почему вы хотите, чтобы они перекрывались, что вы пытаетесь представить? –
Да, эти перекрывающиеся узлы похожи на «кластеры», и на моем графике я хочу показать много таких кластеров. Каждый набор перекрывающихся узлов принадлежит к группе, и в моей визуализации стандартно показывать их как перекрывающиеся. Итак, я хотел достичь этого – assassin
Я думал, что цель «точка» заключалась в том, чтобы избежать перекрытия краев и узлов? – ninjalj