Размещение узлов в Graphviz по вертикали с использованием pydot - PullRequest
13 голосов
/ 07 февраля 2010

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

Ответы [ 3 ]

12 голосов
/ 07 февраля 2010

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

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

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

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

10 голосов
/ 01 мая 2013

Инициализируйте ваш график следующим образом:

graph = pydot.Dot(graph_type='digraph', rankdir='LR')

Это установит направление графика слева направо. В общем, используйте документацию graphviz , чтобы найти нужный атрибут для достижения желаемого.

6 голосов
/ 07 февраля 2010

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

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

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

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

...