В отличии от рассмотренных ранее библиотек, graphviz предназначен исключительно для визуализации. Никаких алгоритмов внутри вы не найдёте. Поэтому чаще всего для манипулирования графами берут другие библиотеки, а полученные результаты представляют в виде dot-файла и отдают graphviz.
Документация краткая, но полная. Примеров в интернете полно (благо библиотека используется уже давно).
Graphviz предоставляет несколько алгоритмов расстановки графа:
- dot - алгоритм расстановки деревьев (хорошо подходит для небольших направленных графов).
- neato - алгоритм Kamada-Kawai.
- twopi - алгоритм радиальной подстановки.
- circo - распределяет вершины равномерно по кругу.
- fdp - алгоритм Fruchterman-Reingold.
- sfdp - модификация алгоритма Fruchterman-Reingold для больших графов.
Как видите, никакого синтаксического "сахара", добавляйте по одной ноде и вершине (:Copy Source | Copy HTML
- G = gv.digraph('domains');
- gv.setv( G, 'size', '10000.00' );
- E = gv.protoedge(G);
- gv.setv( E, 'arrowsize', '0.5');
- N = gv.protonode(G);
- gv.setv( N, 'fontsize', '5' );
- gv.setv( N, 'shape', 'plaintext' );
- for node in nodes.values():
- gv.node( G, node.encode('ascii','ignore') );
- for edge in edges:
- gv.edge( G, nodes[edge[ 0]].encode('ascii','ignore'), nodes[edge[1]].encode('ascii','ignore'));
- t = time.time();
- gv.layout(G, 'fdp');
- logging.debug("compute %.4f sec %d Mb" % ((time.time()-t), memory_usage() / 1024) );
- gv.render(G, 'png', 'graph.png');
Итоговые результаты
Алгоритм | Время работы, сек | Пик потребления памяти, Мб |
---|---|---|
dot | - | - |
neato | - | - |
twopi | 2.2361 | 62 |
circo | - | - |
fdp | 977.3580 | 118 |
sfdp | 4.5221 | 51 |
Алгоритмы dot, neato и circo так и не смогли успешно завершиться, поскольку граф такого размера оказался им не по силам на моём железе =(
Визуальные результаты
Полноразмерные результаты работы алгоритмов доступны по клику.
twopi |
SFDP |
FDP |
Комментариев нет:
Отправить комментарий