digraph test {
node [shape=plain];
n1 [label=<
<table border = "1" cellborder = "0" cellspacing = "0">
<tr><td align = "center"><b>Not centered when using default renderer for SVG</b></td></tr>
<tr><td align = "text">Lorem ipsum</td></tr>
</table> >];
}
графическая документация указывает, что «Кроме того, все эти разметки в настоящее время доступны только через средства визуализации cairo и svg».
Действительно, когда я визуализирую через командную строку с помощью dot -Tsvg ./test.dot -o test1.svg
, я получаю неправильный результат с текстом, не центрированным в узле.
Тогда как когда я указываю рендерер dot -Tsvg:svg ./test.dot -o test2.svg
, все работает хорошо.
Теперь проблема в том, что вызов G.draw('test3.svg', prog='dot')
, вероятно, вызывает первую команду, которая дает неправильно выровненный результат.
Я попытался указать средство визуализации с помощью G.draw('test4.svg', prog='dot', args='-Tsvg:svg')
или G.draw('test5.svg', prog='dot', format='svg:svg')
, но в обоих случаях созданный svg недействителен (по какой-то причине есть два тега <?xml ...>).
Итак, есть ли способ указать средство визуализации через pygraphviz? Или я должен сбросить график в файл .dot и вызвать точку с subprocess.run и правильными аргументами?
Спасибо
После проверки исходного кода PyGraphviz мне удалось заставить его работать с G.draw("test.svg", prog= 'dot', format='svg:cairo')
.
Аргумент формата выводится из имени файла, если он не указан, что приводит к тому, что Dot дважды выводит график в одном и том же файле SVG.