Există în Unix o utilitate utilă numită GraphViz, creată pentru a desena grafice. În acest post voi da un exemplu de utilizare a acestuia. Cei care sunt deja familiarizați cu Graf Viz nu vor fi curioși, este mai bine să citim despre Dracula.
Alții, sper, acest post va duce la un studiu mai atent al acestui program.
Gândit de obicei. Există o config (fișier .gv), cu care este dată descrierea graficului. Configurați următoarele:
digraph G "A" -> "B";
"B" -> "C";
"A" -> "C";
>
GraphViz percepe o astfel de config la intrare și la ieșire dă un fișier cu imaginea graficului png | jpg | gif | Dacă doriți, puteți oferi o descriere mai detaliată a graficului. De exemplu, specificați forma și culoarea vârfurilor, grosimea și direcția muchiilor și așa mai departe.
Nu voi renunța la asta, în paginile omului totul este detaliat.
GraphViz include mai multe programe, care din anumite motive sunt numite "filtre". Cu ajutorul aceluiași grafic, puteți desena diferite metode. Lista și scurta descriere a programelor:
dot - filtru pentru desenarea graficelor direcționate
neato - filtru pentru desenarea grafurilor nedirecționate
twopi - filtru pentru dispunerea radială a graficelor
circo - filtru pentru aspectul circular al graficelor
fdp - filtru pentru desenarea grafurilor nedirecționate
sfdp - filtru pentru desenarea grafurilor mari nedirecționate
Exemple de grafice desenate cu ajutorul lor, puteți viziona site-ul oficial al programului.
Să aruncăm o privire, ca și cum ai citi mana și ai răsturnat site-ul. Excelent, acum puteți încerca să rezolvați cu ajutorul graficului ceva sarcini.
Imaginați-vă că avem mai multe companii, iar aceste companii au clienți. Din anumite motive, putem descoperi ce firmă se referă clientul, dacă întrerupe serviciile unei alte companii. În cazul în care, să zicem, cu găzduire, este foarte ușor de făcut.
Problemă - pentru a construi un grafic care să descrie mișcarea clienților de la companie către companie.
Aici este scriptul care generează un fișier .gv:
utilizați stricte;
Utilizați lista :: Util qw / max shuffle /;
Utilizați Lista :: Mai multeEvenimente qw / uniq /;
utilizați DBI;
utilizați constant MIN_PERCENT => 5;
# generează culori pur distinse și nu foarte negre
culorile mele @
pentru meu $ c (qw / 8 D A Nouă F 6 /) pentru meu $ m (qw / FF0000 00FF00 00FFFF FF00FF FFFF00 /) mi $ t = $ m;
$ t =
# preluați datele din baza de date
meu $ db = DBI-> conect (
"dbi: mysql: bază de date: localhost", "user", "password",
) sau mor "EROARE: $! \ n";
$ $ res = $ db-> pregăti ($ query);
$ res-> execute () sau "Query failed: \ n \ n $ query";
# începutul descrierii graficului
tipăriți "digraph G print qq nodesep = 2;
mindist = 2;
>;
tipăriți "\ n";
Cei mai mulți clienți au trecut peste
$ max_cnt = 1;
# plus și minus numărul de clienți pentru companie
meu% plus;
meu% minus;
în timp ce (meu ($ de la, $ la, $ cnt) = $ res-> fetchrow_array ()) $ data = $ cnt;
$ plus + = $ cnt;
$ minus + = $ cnt;
$ max_cnt = $ cnt> $ max_cnt. $ cnt. $ max_cnt;
împingeți @sources, $ from;
împinge @ surse, $ la;
>
# shuffle pentru a face posibil
# redrageți ușor graficul în mod diferit
@sources = shuffle uniq @sources;
pentru $ src (@sources) # tăiat compania cu un mic "flux de clienți"
următor dacă (max ($ plus, $ minus) <$max_cnt*MIN_PERCENT/100);
# luați următoarea culoare
$ color = $ culori [$ i ++];
$ delta mea = $ plus - $ minus;
# descrierea topului graficului, care corespunde companiei
print "" $ src "[label =" src $ \\ n + "int ($ plus)", - "int ($ minus) ....", delta: $ delta "style =" umplut“, fontcolor = "# 111111", culoare = "# $ culoare",“.
# pentru cei cărora li se plac mai mult dreptunghiurile :)
# "forma =" caseta ", lățimea = 4, înălțimea = 1,".
"fontsize = 16]; \ n";
pentru $ to (keys%>) meu $ cnt = $ date;
$ percents = $ cnt * 100 / $ max_cnt;
# arce foarte "subțiri" nu sunt deduse
dacă ($ percents> MIN_PERCENT) # ieșiți descrierea arcului
print "" $ src "->" $ to "[label =" $ cnt ", fontcolor =" # $ color ", culoare =" # $ color ", penwidth =". int (One + $ percents * 12/100). ", fontsize =". int (12 + $ procente * 12/100) "]; \ n";
>
>
>
# sfârșitul descrierii graficului
tipăriți "\ n> \ n";
Un exemplu de fișier gv făcut cu acest script poate fi privit aici. Este clar că toate datele din ea nu sunt adevărate. Convertește GV la SVG după cum urmează:
circo grafice-fake.gv -Tsvg -o fake.svg
Puteți descărca graficul achiziționat. Și cineva leneș să leagă (sau brusc cineva SVG nu dezvăluie), aici este o imagine mult mai puțin:
Un număr mai mare de clienți plecați corespund benzilor mai groase. În plus, fiecare companie are culoarea proprie.
S-ar putea schimba în continuare mărimea vârfurilor, în funcție de numărul de clienți noi pe care le-a primit compania, dar ceva nu mi-a fost de ajuns să o fac perfect. Poate ar fi bine să înțelegi.
Nu cu mult timp în urmă am primit o altă scrisoare de la unul dintre cititorii blogului. Creatorul scrisorii a învinuit că la departamentul pe care îl studiază, nu se acordă suficientă atenție programării, el a fost, de asemenea, interesat, nu zn.
În viitorul apropiat, am menționat de câteva ori că nu înțeleg foarte bine cum poate Haskell să dezvolte proiecte adevărate, uriașe. Au fost mai multe circumstanțe, dar eram cel mai îngrijorat.
În viitorul apropiat, am terminat de fapt să joc jocuri pe calculator. Dar, uneori, atunci când este necesar să distrugeți timpul, nevoia lor apare. Există câteva jocuri sub UNIX pe care îmi place foarte mult.
Redis (server REmote DIctionary) este un DBMS non-relațional de înaltă performanță. Redis stochează toate datele din memorie, accesul la date este efectuat de către cheie. O copie opțională a datelor poate fi stocată.
Puțin mai devreme am vrut lucruri foarte obișnuite - așa că atunci când primești cea mai recentă corespondență electrică aici și acolo în colțul ecranului, a fost o notificare despre asta. În plus, aveam nevoie doar de observații.