Размещение узлов вертикально в Graphviz с помощью pydot

Я использую Graphviz в Python через pydot. Схема, которую я делаю, имеет много кластеров ориентированных графов. pydot помещает их друг рядом с другом горизонтально приводящим к изображению, которое очень широко. Как я могу сказать этому производить изображения максимальной ширины так, чтобы я мог прокрутить вертикально вместо этого?

13
задан Richard Nienaber 16 February 2011 в 06:56
поделиться

2 ответа

Есть несколько вещей, которые вы можете сделать.

  1. Вы можете установить максимальный размер графика, используя "размер" (например, размер = "4, 8" (дюймов)). Это исправит размер вашего окончательного макета. В отличие от большинства других параметров узла, края и графа на точечном языке, по умолчанию 'size' не имеет значения. Кроме того, по умолчанию используется ориентация "портрет", которая, как мне кажется, является тем, что вы хотите (для графа, который выше и шире), но вы можете захотеть явно задать этот параметр в случае, если ранее он был установлен в "ландшафт".

  2. 'Размер' можно использовать с параметром 'ratio' (соотношение сторон макета) для управления конфигурацией. Коэффициент 'Ratio' принимает значение с плавающей точкой (например, соотношение = "2.0") или 'auto' или 'fill'. (Последнее говорит графвизу заполнять, используя всю область графика, выделенную по 'размеру'.

  3. Наибольшее влияние на конфигурацию графа оказывают 'nodesep' и 'ranksep'. Это минимальное горизонтальное расстояние между соседними узлами одинакового "ранга", и минимальное вертикальное расстояние между соседними рангами узлов. Значения по умолчанию - 0,25 и 0,75 дюйма, соответственно. Для получения нужной конфигурации необходимо одновременно увеличивать узлы и уменьшать рангсеп. Постепенная итерация должна позволить вам быстро сблизиться по набору значений для этих двух параметров, что даст вам нужную конфигурацию.

12
ответ дан 1 December 2019 в 20:56
поделиться

Я не уверен, что вы сможете сделать это со своими данными, но если вы измените порядок вставки узлов в график, это действительно может повлиять на генерируемый граф. Если Вы не хотите предоставлять Graphviz информацию о заказе и хотите, чтобы Graphviz попытался решить проблему оптимального расположения узлов для минимизации соперничества, используйте вместо этого neato Graphviz. Он использует пружинную модель, чтобы выяснить, где должны быть размещены узлы.

Похоже, что внутри пидота можно использовать neato типа:

my_graph.write('my_graph.png', prog='neato', format='png')

Смотрите документацию пидота здесь.

6
ответ дан 1 December 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: