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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

См. podot documenation здесь.