#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 извините!