© 2013 All rights reserved.
31

Jednoduché grafy v PHP

Jednoduchá třída pro generování grafů v PHP 5 s využitím GD knihovny. Třída umožňuje v současné verzi generovat 16 typů grafů, počínaje jednoduchými XY křivkovými až po složitější 3D grafy.

Na adrese grafy.zaachi.com je volně ke stažení jednoduchá třída pro generování grafů v PHP 5 s podporou GD knihovny.


graph

Třída samozřejmě nemůže konkurovat velkým knihovnám jako JPGraph, které umožňují generovat složité grafy, ale jako jednoduchá alternativa bude snad použitelná.

Třída umožňuje generovat několik různých typů grafů, které jsou na sobě navzájem nezávislé, počínaje základními typy jako XY Grafy zadávané souřadnicemi až po složitější 3D grafy.

V závislosti na vytvořeném grafu je možnost vložit přímo do obrázku grafu legendu, osy, či vodící čáry. Samozřejmě se třída nemůže rovnat velkým knihovnám jako například JpGraph, ale i tak může být použita jako jednodušší alternativa.

Podporované typy grafů jsou vidět na adrese grafy.zaachi.com v levém menu. Ke každému typu grafu je zde uvedena ukázka použití.

Výhoda třídy je v generování grafu, kdy pro vygenerování základního grafu každého typu stačí volat pouze několik metod, a není potřeba žádné složité nastavování, protože je většina věcí automaticky dopočítávána.

Podporované typy grafů:

  • Line Graph
  • XY Graph
  • Spline Graph
  • Transition Graph
  • Impulse Graph
  • Area Graph
  • Transparent Area Graph SumArea Graph
  • Column Graph
  • Transparent Column Graph
  • Sum Column Graph
  • 3D Column Graph
  • 3D Sum Column Graph
  • Pie Graph
  • Hole Pie Graph
  • 3D Pie Graph

Kromě těchto typů grafů je třída doplněna i o možnost antialisingu (vyhlazování hran), které GD knihovna neumí.

Jak je na první pohled vidět, je zde hodně věcí, které je potřeba dodělat nebo dotáhnout dokonce, proto své postřehy směřujte diskuse k tomuto článku.

Více na grafy.zaachi.com

Comments are closed for this page

Vyzerá to veľmi dobre, mám však dve otázky:
1. aká je licencia?
2. dá sa vytvoriť pásový graf? – myslím stĺpcový otočený o 90 stupňov. Potrebujem pomerne dlhý popisok ku každému stĺpcu.

Licence bude samozřejmě GNU GPL.
Pásový graf prozatím vytvořit nejde, ale je to hned další typ, který chci dodělat.
Takže jakmile bude trochu volného času, tak tam bude.

GD antialiasing umí. U textů i u křivek.

No umí, jak se to veme.
Pomocí funkce imageantialias jde sice aliasing zapnout, ale výsledný efekt není nic moc.

stahnul jsem si priklady a haze to notices, asi je mate vypnute – pro vyvoj si je zapnete; musite testovat i jestli promena existuje – isset()
.
jeste k te licenci: nemam nic proti GNU GPL, plne ji podporuji a fandim ji. grafy byly ale delany jako BP, takze jste sice autorem, ale majitelem programu je univerzita. prectete si licencni podminky (vychazi z vysokoskolskeho zakona).
typ licence urcuje skola, ale je temer 100% pravdepodobnost, ze skola umozni bezplatne sireni

vypada to, ze jsou problemy s kodovanim. Jestlize je zdrojak v UTF-8, tak to vypise nasledujici:

Warning: Cannot modify header information – headers already sent by (output started at /var/www/test.php:1) in /var/www/lib/graph.php on line 342

Warning: Cannot modify header information – headers already sent by (output started at /var/www/test.php:1) in /var/www/lib/graph.php on line 343

Warning: Cannot modify header information – headers already sent by (output started at /var/www/test.php:1) in /var/www/lib/graph.php on line 344

Warning: Cannot modify header information – headers already sent by (output started at /var/www/test.php:1) in /var/www/lib/graph.php on line 345

Dobry den,
problemy s kodovanim urcite nebudou.
Zdrojove kody jsou ulozene v UTF-8, ve kterem musi fungovat.
Problem musi byt u vas.
Pokud si stahnete ukazkove priklady tak by meli fungovat.
U vas je problem s odeslanim hlavicek, protoze zrejme pred odeslanim hlavicek odeslete jeste nejaky jiny znak, podivejte se, jeslti nemate ve zdrojovem kodu tridy napriklad prazdnou mezeru nebo podobne.

Jak správně použít tu třídu, aby se mi vypsal graf do obrázku v html? Když to zkouším z těch tvých příkladů, tak mi to vrátí graf jako obrázek, ale už mi to nevypíše nic z html.

Děkuji.

Ahoj, trida odesila hlavicky pro PNG obrazek.
Doporucuji si generovani obrazku umistit do jineho souboru a pomoci tagu img na nej odkazat.
<img src="obrazek.php" alt="graf" />

Díky, dobrá práce. Jen tak dál 🙂

Velmi pekna praca, avsak da sa zmenit velkost pisma v osiach nastavenim nejakej z premennych bez prepisania hlavneho kodu?

Ahoj, perfektní. jen, jak to napojit třeba na mysql? pokud dám něco z databáze, tak mi to generuje neplatný obrázek, prostě se png nevygeneruje. A´t to zkouším, jak to zkouším:( Díky.

take mam problem, zda se to nejake divne

Unk:
ja som mal ten isty problem ale ako uz nizsie bolo pisane musis ten subor so zdrojakom volat pomocou <img src="obrazek.php" alt="graf" />
Inac tuto triedu som vyuzil vo svojej diplomovke, cim sa chcem touto cestou podakovat. Inac chcelo by to aspon zakladnu dokumentaciu 🙂 ale inac super

Ahoj, moc pekne. Mam problem s vykreslenim nekterych grafu primo v prikladech. Chtela bych pouzit Column Graph a zrovna ten nejde

Mohla bys napsat jak presne nejde? Popripade mi napis mail, je v kontaktech.

Ahoj pro vsechny, kteri by narazili na problem. Pokud se grafy nevykresluji (ani ty ukazkove), zkuste nastavit v php.ini
error_reporting = E_ALL & ~E_NOTICE

Ahoj, super grafy. Dik moc, hodne mi to pomohlo. Jen mam problem s tim, kdyz je hodnota nastavena na 0, napr. v kolacovem grafu . Da se to nejak obejit? Nebo mate nekdo napad co s tim?
Diky moc.

Slo by nejakym zpusobem jednoduse upravit aby vykreslovani bylo od nejmensi hodnoty y?

Graf je zbytecne vysoko a stava se mene prehlednym, viz obrazek

http://s1.imgupload.cz/img/68699/O5iOk/graph.php.png

Mal som asi podobny problem. Urobil som to upravou php suboru obrazku pomocou (file_get_contents, fopen, str_replace,…). Nacital som originalny php obrazka, zmenil v nom hodnoty, ulozil ho pod novym menom a vykreslil :).
Asi som to moc elegantne nevyriesil, ale aspon slape to 🙂

zaachi: taktiez dik moc!

Mám stejný problém – nešlo by upravit vykreslování grafu upravit tak, aby čára, body,… byly uprostřed obráku – vykreslovani od nejmensi hodnoty y? Dík za info.

Ahoj, mam menší problém se zobrazením. Když uzavřu kód z example16.php do třídy a funkce, tak mi třída vrátí

<img alt="graph" src="index.php?graph=1"/>

ale nic se nezobrazí.Nevíte v čem je problém a popřípadě jak to mám uzavřít do funkce?

Díky

Zdavím všechny. Když mám graf vytvorevý a všechno slape, i s mysql, tak mi tam nejde pod ten obrazek vložit html kod, něco jako ,,Na hlavní stránku". Děkuji za odpověď a řešení

Ahoj. Určitě to jde. Když to vezmeš logicky, tak vezmeš nejvyšší hodnotu a nejnižší hodnotu z grafu, ty od sebe odečteš a zbude ti nějaký rozdíl, např.: když max je 10150 a min je 10125, tak odečteš 10150-10125 a rozdíl je 25. Takže místo těch 10150 jako maximum si vytyčíš pouze 25 hodnot a akorát změníš na boku číslování, které je místo od 0 těch 10125 až 10250.:-)

Ahoj,
graf generujes jenom pouze jako obrazek, ktery vkladas do stranky pomoci tagu IMG, html si potom muzes do stranky vlozit pod obrazek jak chces.

Ahoj. Dá se do pozadí grafů vložit obrázek a jak by se to případně udělalo? Děkuji za odpověď.

Da se nejakym zpusobem zmenit prednastavene barvy v "Column graph", barvy jsou tam nejak definovane a neprisel jsem na to jak a chtel bych je zmenit, ale nevim jak jsi prisel k tem cislum.

Př: (white = 16777215)

Zkousel jsem snad vsechno mozne ale neprisel jsem na to prosim o radu jak ty barvy zmenit.
Dekuji

Tohle dej na začátek dokumentu PHP

ob_start();

Zdravim,

mam problem v tom, ze pokud se hodnoty grafu od se lisi o vice radu… napriklad 1500 a 500000, tak me to kolacovy graf uplne rozhodi.. treba vynecha uplne nejakou hodnotu a i treba zamenni barvy… resp je prereje..
Stejne tak, kdyz jedna z hodnot je 0. (To jsem si sice osetril, ale ty pomery nevim jak…

Narazil nekdo na neco takoveho, prosim?

Diky !

Dobrý den,
Používám graf 3dcolumn v PHP-cli. Vše chodí jak má, ale po spuštění skriptu, vypíše terminál:

PHP Notice: Undefined variable: x in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 1 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 2 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 3 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 4 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 5 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 6 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 7 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 8 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 9 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 10 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 11 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 12 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 13 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 14 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 15 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 16 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 17 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 18 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 19 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 20 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 21 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 22 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 23 in /var/www/graph.php on line 2099
PHP Notice: Undefined offset: 24 in /var/www/graph.php on line 2099

Počet hlášek jse podle počtu položek v grafu. Čím to může být. Děkuji

Zdravím, mám dotaz na gd knihovnu. Používám verzi bundled – 2.0.34 kompatibilní, přesto se mi například klasické koláčové("pie") grafy nezobrazí. Jakou verzí knihovny jsou zobrazovány uvedené příklady ?

Děkuji předem za odpověď.

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836