Может ли graphviz ограничить график определенной шириной?

#python #graphviz

#python #graphviz

Вопрос:

Я использую graphviz из python для построения японских кандзи и их взаимосвязей. Я экспортирую выходные данные в формате svg и использую sfdp в качестве механизма рендеринга. Результат примерно квадратный (3000×3000). Мне было интересно, есть ли какой-либо способ указать ограничение, чтобы результат был больше похож на вертикальный прямоугольник (например, 5000×1000), чем на квадрат. Похоже, что параметры размера в основном работают с масштабом результирующего изображения, а не с расположением самих узлов. Но у меня есть много разных компонентов connexe, поэтому их должно быть легко перемещать. То, что я пытаюсь сделать, невозможно? Спасибо!

Ответ №1:

sfdp поскольку он использует модель spring, он имеет тенденцию создавать квадратные графики. Однако, если вы используете dot , у вас есть дополнительные атрибуты, такие как rank и rankdir , для придания вашему графику большей формы в соответствии с вашими пожеланиями.

Вы можете обратиться к атрибутам Node, Edge и Graph, чтобы увидеть, какие атрибуты поддерживает sfdp.

Комментарии:

1. Большое спасибо! dot создает очень горизонтальный график для этого случая, поэтому я не уверен, что смогу заставить его работать, но я буду продолжать пытаться!

2. Чтобы сделать график более вертикальным, используйте на графике что-то вроде rankdir="TB" и убедитесь, что каждый узел имеет разный ранг.

Ответ №2:

Попробуйте поиграть с ratio атрибутом:

Если ratio является числовым, оно принимается за желаемое соотношение сторон. Затем, если фактическое соотношение сторон меньше желаемого, высота рисунка увеличивается для достижения желаемого соотношения; если фактическое соотношение больше этого желаемого соотношения, ширина рисунка увеличивается.

Итак, если исходный график был таким:

введите описание изображения здесь

Добавление graph [ratio="1.5"] атрибута сделает его похожим на это:

введите описание изображения здесь

UPD: также обратите внимание, как ratio атрибут работает в паре с size атрибутом, возможно, комбинация будет лучшей для вас. Подробное объяснение в документах ratio по ссылке, которую я опубликовал.

Комментарии:

1. Большое спасибо за этот ответ! Я пытался поиграть с ratio, но, похоже, оно полностью игнорируется, а размер, похоже, влияет только на масштабирование конечного результата. Я полагаю, что это, вероятно, проблема поддержки библиотеки python: s Я пробовал sfdp и neato, но, похоже, это не имеет значения. Это, вероятно, настолько хорошо, насколько это возможно с моей библиотекой: s извините!