ПредишенСледващото

Познаването Graphviz

Има Unix-като необходим инструмент право Graphviz, предназначен за рисуване на графики. В този пост ще дам един пример за използването му. Тези, които вече са запознати с GrafVizom няма да любопитни, по-добре прочетете за Дракула.

Други, надявам се този пост ще насърчи по-внимателно проучване на аплети.

Мислех, че обикновено. Има довереник (.gv файл), с което графиката е дадено описание. Config това за такова съдържание:

диграфа G "А" -> "В";
"В" -> "C";
"А" -> "C";
>

Graphviz взема такава конфигурация на входа и на изхода дава PNG | JPG | GIF | SVG файл с изображението на графиката. по-подробно описание на графиката може да се даде, ако се желае. Например, зададени върховете на формата и цвета, дебелината и ориентацията на ребрата и др ..

Няма да се спирам на това, в човека-страници всеки детайл е боядисани.

Структурата идва Graphviz няколко програми, които по някаква причина са наречени "филтри". С помощта на една и съща графика може да се направи по различни начини. Списък и кратко описание на програмата:

точка - филтър за чертеж насочено графики
neato - филтър за изготвяне неориентирани графа

twopi - филтър за радиални оформления на графики

Circo - филтър за кръгова оформление на графики
FDP - филтър за изготвяне неориентирани графа
sfdp - филтър за изготвяне големи неориентирани графа

Примери за графики изготвени ги използват, ще бъдат в състояние да погледнете програмите от официалния сайт.

Да се ​​създаде мнение, ако почитан мана и погледна през сайта. Отлично, вече можем да използваме опита да реши grafviza никакъв проблем.

Представете си, че имаме няколко фирми, както и тези компании имат клиенти. По някакви причини, ние можем да проследим, на които фирмата се занимава клиент, ако той откаже от останалите услуги на компанията. В случай на, да речем, уеб хостинг, че е много лесно да се направи.

Задачата - да се построи графика, показваща движението на клиенти от компанията да дружество.

Ето един скрипт, който генерира .gv файл:

използването на строг режим;
използвате Списък :: Util QW / макс Разбъркване /;
използване Списък :: MoreUtils QW / Uniq /;
използва DBI;
използва постоянен MIN_PERCENT => 5;

# Създаване на видима и не толкова черни цветове
моите @colors;
за моя $ в (QW / 8 D девет F 6 /) за моя $ т (QW / FF0000 00FF00 00FFFF FF00FF FFFF00 /) ми $ т = $ m;
$ T =

# Вземете данните от базата данни
ми $ db = DBI-> свързване (
"Dbi: MySQL: база данни: Localhost", "потребител", "парола",
0, RaiseError => нула>
) Или да умрат "ГРЕШКА: $ \ н!";

ми $ ВЕИ = $ db-> подготви ($ заявка);
$ ВЕИ> изпълнение () или да умрат "Query неуспешно: \ н \ заявка н $";

# В началото на описанието на графика

Познаването Graphviz

печат "диграфът G печат QQ nodesep = 2;
mindist = 2;
>;
отпечатва "\ Н";

# Максимални клиенти дефектирали
ми $ max_cnt = 1;

# Плюс и минус броя на клиентите на фирма
ми% плюс;
ми% минус;

а (моя ($ от, $ до $ CNT) = $ ВЕИ> fetchrow_array ()) $ данни = $ CNT;
$ Plus + = $ CNT;
$ Минус + = $ CNT;
$ Max_cnt = $ CNT> $ max_cnt. $ Cnt. $ Max_cnt;
натиснете @sources, $ от;
натиснете @sources, $ до;
>

# Shuffle, така че да е възможно
# Начертайте графиката малко по-различно
@sources = разбъркване Uniq @sources;

Познаването Graphviz

за моя $ SRC (@sources) # отрязани с малка компания "гюм"
Следващата ако (макс ($ плюс, минус $) <$max_cnt*MIN_PERCENT/100);

# Вземете друг цвят
ми $ цвят = $ цветове [$ аз ++];
ми $ делта = $ плюс - минус $;
# Описание Броене на върха, на съответното дружество
печат "" $ SRC "[етикет =" $ SRC \\ N + "INT ($ плюс)", - "INT ($ минус) ....", делта: $ делта ", стил =" пълнеж "FONTCOLOR = "# 111111", цветен = "# $ цвят", ".
# За тези, които предпочитат правоъгълници :)
# "Shape =" кутия ", ширина = 4, височина = 1".
"FONTSIZE = 16]; \ п";
за моя $ до (Клавиши%>) ми $ CNT = $ данни;
ми $ проценти = $ CNT * 100 / $ max_cnt;
# Много "тънко" дъга не е извод
ако ($ процента> MIN_PERCENT) описание # извод дъга
печат "" $ SRC "->" $ до "[етикет =" $ CNT ", FONTCOLOR =" # $ цвят ", цвят =" цвят # $ ", penwidth =". междинно съединение (А + $ проценти * 12/100). "FONTSIZE =" Int (12 + $ проценти * 12/100) "]; \ п" ..;
>
>
>
# Края на описанието на графика
печат "\ н> \ Н";

Пример GV-файл направен с помощта на този скрипт, можете да погледнете тук. Ясно е, че всички данни в него не е вярно. GV се превръща в SVG последващо начин:

Circo графика-fake.gv -Tsvg -о fake.svg

Тук можете да изтеглите закупен графиката. И кой е прекалено мързеливи, за да свалите (или изведнъж SVG не разкрива на никого), така че картината е много по-малко:

Познаването Graphviz

По-голям брой клиенти, които са напуснали съответства на по-дебели ленти. В допълнение, всяка компания използва собствен цвят.

Един дори може да промени размера на върха, независимо от колко нови клиенти е получила компанията, но имам нещо наляво, за да го направи перфектно. Може би по-добре да излезе.

Не много отдавна, аз получих още едно писмо от 1 блог читатели. Създателят на писмото до споря този стол, на който той е обучен, не се обръща достатъчно внимание на програмиране, също се интересуват, не подпише.

В близко бъдеще, споменах няколко пъти, че не ми е ясно как може да се развие в Haskell истински, огромни проекти. Имаше няколко обстоятелства, но priemuschestvenno ме притеснява.

В близко бъдеще, аз всъщност се стигна до компютърни игри. Но понякога, когато трябва да убие времето, възниква необходимостта от тях. Има малки игри под UNIX, които наистина харесват.

Redis (дистанционно речник сървър) - не е релационна база данни с висока производителност. Redis запазва всички данни в паметта, данните се използват от ключово значение. По желание, копие на данните може да се съхранява.

Малко по-рано, исках много обикновени неща - че тук и там стана известие за това в ъгъла на екрана, когато можете да получите най-новата електронна поща дейност. Освен това, имах нужда от само уведомление.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!