Graphviz es la mejor opción en mi opinión.
Graphviz es la biblioteca principal de representación/diseño gráfico; es maduro, estable, de código abierto y gratuito. No es un diagrama de flujo dedicado o un paquete de diagramación, pero su caso de uso principal, es decir, la representación eficiente y estética de objetos compuestos por nodos y bordes, obviamente subsume el diagrama de flujo, particularmente porque su API permite al usuario establecer varias restricciones en el diseño para alentar el procesamiento en los diversos formatos, por ejemplo, puede requerir que todos los nodos del mismo nivel (el mismo número de padres de la raíz) se procesen en una única fila alineada al centro.
Graphviz no es una biblioteca de Python (está escrita en C); sin embargo, hay enlaces de python de alta calidad disponibles.
La biblioteca python-Graphviz con la que estoy más familiarizado es pygraphviz, que es excelente.
Los otros dos son pydot y yapgvb. He usado ambos al menos algunas veces. Cada uno es más pequeño que pygraphviz (lo que podría ser una ventaja según su caso de uso); Además, ni está documentado ni pygraphviz.
Afortunadamente, los tres de estas bibliotecas de Python son envolturas delgadas sobre Graphviz, por lo que ninguno ocultar la sintaxis de peso ligero, elegante Graphviz (el punto idioma).
Aquí está el código (en graphviz' punto idioma) que usé para crear el pequeño "diagrama de flujo" a continuación:
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];
}
Este también es bueno: http://flowchart.js.org –