Я привожу писание нескольких наиболее симпатичных мне программ для отрисовки графов. Их существует значительно больше. Если кто использовал какую-либо такую программу, раскажите. Особенно интересно, какая задача была с помощью такой программы решена.
GraphViz
Про GraphViz уже вспомнили в комментариях. Ну и я могу рассказать о GraphViz больше всего, потому что я в итоге пользовалась именно им.
Программа сурова и аскетична, непривычный вид для виндового пользователя.
Прежде чем начать работать лучше почитать хелп, который лежит в директории GraphViz/doc. Интуитивно понятный интерфейс вас там не ждет. На самом деле GraphViz - это набор из нескольких программ, я пользовалась одной из них, dotty. dotty умеет считывать граф из текстового файла, где граф преставлен в несложном формате, и красиво выводит его на экран. Если что-то не понравится, узлы можно подвинуть, подправить самостоятельно. Здесь же можно добавить/удалить узлы, можно вообще здесь же граф нарисовать. Если зарыться в документацию, то можно узнать, что dotty делает иерархическую раскладку, а GraphViz умеет и другие, но можно в это и не вникать. Это идеальное решение, если хочешь просто нарисовать граф, не забивая себе голову деталями, раскладками и т.п.
У меня граф лежал в виде списка узлов и переходов в базе данных. Я написала небольшой скрипт, который вытягивал этот граф из базы и писал его в текстовый файл в формате, понятном dotty. Потом скармливала этот граф dotty. Мне вполне этого хватило.
Как написано у них на сайте, отрисованный граф можно экпортировать в графические форматы, SVG, Postscript. Экспортом я не пользовалась, мне надо было только распечатывать.
Есть варианты под Windows, пэкаджи для Линукса, разных Юниксов, MacOS. Есть исходники.
Следующими программами я не пользовалась, цитирую то, что написано у них на сайте.
yEd
yEd построена на базе java-библиотеки для отрисовки графов под названием yFiles. Библиотека не бесплатна, а вот программа yEd бесплатная. Интерфейс красивый, на сайте много скриншотов с отрисованными графами. Пользователей затравливают красивыми картинками.
Есть экспорт в форматы SVG, WMF, BMP, JPG и GIF.
Поддерживает различные алгоритмы отрисовки, вот пара примеров, на сайте их значительно больше.
Органическая раскладка
|
Ортогональная раскладка.
|
Примеры отрисовки больших графов.
Большая кластеризованная сеть
| Большая сеть отрисована в круговой раскладке
|
Древовидная стукрура, 10000 узлов
| Большая карта сети, отрисованная в органической раскладке
|
aiSeeЭто уже за деньги, но есть 30-дневная урезанная триал-версия. Ее можно получить для некоммерческого использования, но некоммерческая версия тоже урезана.
Очень настаивают на том, что программа оптимизирована для отрисовки очень больших графов, до сотен тысяч узлов и работает с ними очень быстро. Для таких графов предусмотрен фолдинг (схлопывание групп узлов в один узел).
Что представляет собой особенный интерес - есть версия сайта на русском. И очень интересный пример графа я там откопала. Они перевели карту московского метрополитена в формат GDL (graph description language), в котором они хранят все графы, и отрисовали. То, что у них получилось, уж больно похоже на официальную карту метрополитена.
Умеет экспортировать в форматы SVG, PNG и HTML.
Есть версии для Windows, Linux, Solaris, и Mac OS X.
Это были программы, которые умеют делать двумерную раскладку. Следующие отрисовывают граф в трех измерениях. Картинка получается очень красивой, но большой практической пользы от них я не вижу. Для создания Вау! эффекта на презентациях они подходят хорошо, но анализировать информацию, таким образом представленную, на мой взгляд неудобно. Поэтому кратко:
Обе написаны на Java с использованием
Java3D, у обеих исходники открытые.
Проектов по отрисовке графов огромное количество. Постоянно появляются новые, старые умирают. Вот несколько ссылок на проекты, которые не вошли в мой рассказ.
GVF - The Graph Visualization FrameworkGraph VisualisationuDraw(Graph)Comp.compilers: tools for graph visualization - summary. Очень старое обсуждение программ для отрисовки графов.
Это продолжение рассказа об отрисовке графов. Начало можно найти тут:
Нарисовать граф красиво.