Санитар (ex_igors) wrote in lifeonmacs,
Санитар
ex_igors
lifeonmacs

Рисовалка графов

Больная тема для меня -- рисование под маком разнообразных диаграмм. Open source софта я не знаю, ставить первую пиратскую программу не хочется, платить за Concept Draw из своего кармана тоже неинтересно.

Недавно у меня возникла задача нарисовать сложную картинку о взаимодействии автономных систем в интернете -- и, о радость, обнаружена великолепная штука по имени Graphviz (http://www.graphviz.org), которая предназначена ровно для этого, умеет экспортировать в туеву хучу форматов, и рисует всё самостоятельно по файлику примерно такого вида:

graph Internet {

overlap=false;
splines=true;
label="Runet 2007";

// UPG
"AS6854, AS8342\nSynterra" -- "AS8359\nComstar Direct" [style="setlinewidth(4)"];
"AS8359\nComstar Direct" -- "AS2766, AS3216, AS8350\nGolden Telecom" [style="setlinewidth(4)"];
"AS2766, AS3216, AS8350\nGolden Telecom" -- "AS6854, AS8342\nSynterra" [style="setlinewidth(4)"];

// Comstar Direct
"AS8359\nComstar Direct" -- "AS6731\nComstar" [style="setlinewidth(4)"];
"AS8359\nComstar Direct" -- "AS3327\nLinxTelecom, EE" [style="setlinewidth(2)"];
...
}


Результат, отрендеренный методом neato с запретом на перекрытие узлов графа, у меня выглядит так (не пользуйтесь картой по прямому назначению, эта версия неточная!):
http://vse.zaeblo.com/files/lifeonmacs/internet-map.png (0.5 MB)

К сожалению, легенду рисовать не умеет, её придётся допечатывать в уже экспортированную картинку. И пока ещё в neato не решена проблема с наложением рёбер в случае, если два узла соединены более чем одной линией. Придётся или как-то отказаться от нескольких линий, или использовать другие методы рендеринга, более подходящие для направленных графов, и в данном случае выдающие неудобоваримую простыню.

Очень удобно использовать Pixelglow -- GUI-интерфейс для MacOS, благо он следит за обновлением файла с описанием, и перерисовывает картинку у себя, как только вы нажимаете в текстовом редакторе Save. Автор забил на поддержку, поэтому связывание Pixelglow с современной, а не старой версией Graphviz -- маленький трюк, о котором написано здесь:
http://www.ryandesign.com/graphviz/faq.php
Tags: diagrams, drawing, flowchart, graphviz, math
  • Post a new comment

    Error

    default userpic
  • 0 comments