Ответ 1
Graphviz - лучший вариант, на мой взгляд.
Graphviz - это библиотека рендеринга/макета премьеры; он зрелый, стабильный, с открытым исходным кодом и бесплатно. Это не выделенный блок блок-схемы или диаграммы, но его основной вариант использования - то есть эффективный и эстетический рендеринг объектов, состоящий из узлов и ребер, очевидно, включает в себя чертеж блок-схемы - особенно потому, что его api позволяет пользователю устанавливать различные ограничения на макет для поддержки рендеринга в различных форматах - например, вы можете потребовать, чтобы все узлы того же уровня (одинаковое количество родителей из корня) отображались в одной выровненной по центру строке.
Graphviz не является библиотекой python (она написана на C); однако существуют высококачественные привязки python.
Библиотека python-Graphviz, с которой я знаком, - pygraphviz, что отлично.
Остальные два: pydot и yapgvb. Я использовал их как минимум несколько раз. Каждый из них меньше, чем pygraphviz (что может быть преимуществом в зависимости от вашего варианта использования); кроме того, ни документировано, ни pygraphviz.
К счастью, все три библиотеки python - тонкие обертки над Graphviz, поэтому никто не скрывает легкий, элегантный синтаксис Graphviz (язык точек).
Здесь код (в graphviz 'dot langauge) я использовал для создания небольшой "блок-схемы" ниже:
digraph {
node [ fill=cornflowerblue,
fontcolor=white,
shape=diamond,
style=filled];
Step1 [ color=darkgoldenrod2,
fontcolor=navy,
label=start,
shape=box];
Step2;
Step3a [ style=filled,
fillcolor=grey80,
color=grey80,
shape=circle,
fontcolor=navy];
Step1 -> Step2;
Step1 -> Step2a;
Step2a -> Step3a;
Step3;
Step3a -> Step3;
Step3a -> Step2b;
Step2 -> Step2b;
Step2b -> Step3;
End [ shape=rectangle,
color=darkgoldenrod2,
fontcolor=navy];
Step3 -> End [label=193];
}