Подтвердить что ты не робот

Graphviz DOT организует узлы в кругах, макет слишком "компактный"

Я нахожусь на полпути, см. редактирование

ОК, вот моя проблема, я создаю график модуля python, включая все файлы со своими функциями/методами/классами.

Я хочу организовать это так, что узлы собираются кругами вокруг своих родительских узлов, в настоящее время все находится на одной гигантской горизонтальной строке, что делает вещь > 50 тыс. пикселей в ширину, а также позволяет конвертеру svg сбрасываться (только отображает примерно половину графа).

Я прошел через docs, но не смог найти ничего похожего на трюк.

Итак, вопрос:
Есть ли простой способ сделать это, или мне нужно полностью расставить все это?:/

EDIT:
Благодаря замечанию Эндрюса у меня есть правильный макет, единственная проблема в том, что это немного "компактно"... так что теперь вопрос, как это исправить?

Test

4b9b3361

Ответ 1

Я упомянул все наиболее важные параметры, которые влияют на ваш текущий макет, а затем предложили значения для этих параметров. Тем не менее, я подозреваю, что вы можете получить макет, который вы хотите, просто применяя пару этих предложений.

  • уменьшить вес кромки, например [weight = 0.5]; это сделает края дольше, вызывая кластеров, которые вы сейчас видите в своем графа, чтобы "отключиться".

  • избавиться от границ node, node_A [Не цвет = нет; форма открытого текста =]; особенно для овальных узлов, существенная доля node пробел "не используется" (т.е. не используется для отображения метки node).

  • явно задает размер шрифта для узлы (границы node увеличены так, чтобы они окружали node текст, что означает, что шрифт размер и объем текста для данного node оказывает значительное влияние на его размер); [fontsize = 11] должно быть большим достаточно, чтобы быть разборчивым, но также уменьшить "загроможденный" вид ( размер по умолчанию - 14).

  • увеличить минимальное расстояние между узлы через 'nodesep'; например, nodesep = 2.0; это будет прямо обратитесь к своему возражению относительно вашего графика "слишком compact. "('nodesep' и 'ranksep' вероятно, повлияет на то, как точка рисует график больше, чем любые другие параметры для node, ребро или граф. В твоем случае, похоже, у вас есть только два разряда узлов; 'ranksep' устанавливает минимальный расстояние между узлами разных ряды - это похоже на все узлы которые составляют ваш график, относятся к того же ранга (за исключением нескольких верхних уровней узлы в центрах).

  • явно задает общий размер графа, например, size = "7.75,10.25" (гарантирует, что ваш график подходит для страницы 8.5 x 11 и что он занимает все пространство)

  • И одно чисто эстетическое предложение что в лучшем случае поможет график выглядит менее загроможденным: цвет шрифта по умолчанию для обоих краев и узлы черные. Большинство чернила на вашем графике взяты из этих двух структур (особенно если вы удалите границы node), поэтому я бы например, установить либо node (текст) fontcolor или edge fontcolor для "синего", чтобы помочь глазу отличить два набора графа структуры.

Ответ 2

Если он слишком компактный, вы захотите испортить длину края. У вас есть пара вариантов в зависимости от схемы графика:

  • Если ваш макет - sfdp или fdp, настройте свойство graph. Значение по умолчанию - 0,3.
  • Для neato (или fdp) настройте свойство edge len. По умолчанию 1.0 для neato и 0.3 для fdp.
  • Для точки вы можете использовать свойство edge свойство minlen, которое является минимальной длиной края. Значение по умолчанию: 1.

Вы также можете захотеть связать себя с моделью свойств графа, которая определяет поведение кластеризации. В частности, попробуйте подмножество. Я верю, что это поможет вам: http://www.graphviz.org/doc/info/attrs.html#d:model

Кроме того, вы можете удалить перекрытия вместе со способами масштабирования: http://www.graphviz.org/doc/info/attrs.html#d:overlap