Navigace

Hlavní menu

 

Submenu

 

Statistika přístupů v PHP – sloupcové grafy

Dnes si povíme, jak s pomocí vynikající aplikace JpGraph vytvořit profesionální sloupcové grafy zachycující různé statistické veličiny. V našem případě to bude hodinová a denní návštěvnost.

Aplikace JpGraph a její instalace byla před nedávnem popisována v článku Profesionální grafy v PHP snadno a rychle. V dnešním článku vám představím dva sloupcové grafy, příště to budou dva koláčové grafy. Snažil jsem se vytvořit takové grafy, na kterých je dobře vidět, co všechno můžete měnit a nastavovat tak, aby vám graf plně vyhovoval.

Grafy budeme vkládat do souboru stat.php prostřednictvím tagu <img>. V parametru sql_access_date budeme předávat období, pro které se bude graf vytvářet.

// graf
echo '<p align="center"><img src="hourly.php?sql_access_date=' . URLEncode($sql_access_date) . '" border="0" alt=""></p>';

Protože JpGraph pracuje standardně s kódováním ISO-8859-2, vložíme do souboru function.php funkci Win_Iso($text), která převádí text v kódování Windows-1250 na ISO 8859-2. Pokud pracujete na jiném systému než Windows, pak tuto funkci potřebovat nebudete. Soubor umístíme přímo do složky jpgraph/src/.

function Win_Iso($text)
 {
    return StrTr($text,"ŠšŽžĽľŤťŚŹśźĄą","©ą®ľĄµ«»¦¬¶Ľˇ±");
 }

Hodinová návštěvnost (hourly.php)

Výsledkem našeho snažení bude např. tento graf:

Hodinová návštěvnost

Skripty pro jednotlivé grafy budou ve zvláštních souborech umístěných standardně v adresáři jpgraph/src/counter. Pro statistiku hodinové návštěvnosti to je soubor hourly.php. Vzhledem k tomu, že vytvoření grafu je dostatečně okomentováno přímo ve skriptu, nebudu se nyní příliš rozepisovat. Navíc práce s aplikací JpGraph je natolik intuitivní a relativně jednoduchá, že se s ní naučíte pracovat během několika desítek minut.

include("db.php");    // připojení k databázi
include("../function.php");    // obsahuje funkci WinIso()

// načtení souborů nutných pro vytvoření grafu
include("../jpgraph.php");
include("../jpgraph_bar.php");

$sql_access_date = StripSlashes(URLDecode($sql_access_date)); // datum

// data pro osu Y
for($i=0;$i<=23;$i++):
    $query = MySQL_Query("SELECT count(*) FROM access WHERE HOUR(access_date) = '$i' AND $sql_access_date");
    $result = MySQL_Fetch_Array($query);
    $data[] = $result["count(*)"]; // počet přístupů v jednotlivých hodinách
endfor;

// graf (velikost) a měřítko
$graph = new Graph(535,250);
$graph->SetScale("textlin");

$graph->img->SetMargin(45,30,25,40);    // velikost okrajů
$graph->SetColor("aliceblue");    // barva pozadí grafu
$graph->SetMarginColor("gray9");    // barva okraje grafu
$graph->SetFrame(); // orámování
$graph->yaxis->scale->SetGrace(15); // nastavení měřítka osy Y

// titulek a názvy os
$graph->title->Set(Win_Iso("Hodinová návštěvnost"));
$graph->xaxis->title->Set("Hodina");
$graph->yaxis->title->Set("Počet přístupů");

// nastavení fontů titulku a názvů os
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// sloupcový graf
$bplot = new BarPlot($data);

$bplot->SetFillColor("deepskyblue"); // barva sloupců
$bplot->SetShadow();    // stín sloupců

// formát, font, barva a úhel popisků u sloupců
$bplot->value->SetFormat("%d");
$bplot->value->SetFont(FF_FONT1,FS_NORMAL);
$bplot->value->SetColor("blue");
$bplot->value->SetAngle(90);
$bplot->value->Show();

// přidej sloupcový graf
$graph->Add($bplot);

// zobraz graf
$graph->Stroke();

Denní návštěvnost (daily.php)

Denní návštěvnost

include ("db.php");    // připojení k databázi
include("../function.php");    // obsahuje funkci WinIso()

// načtení souborů nutných pro vytvoření grafu
include ("../jpgraph.php");
include ("../jpgraph_bar.php");

$sql_access_date = StripSlashes(URLDecode($sql_access_date));    // datum

// data pro osu Y
for($i=0;$i<=6;$i++):
    $query = MySQL_Query("SELECT count(*) FROM access WHERE WEEKDAY(access_date) = '$i' AND $sql_access_date");
    $result = MySQL_Fetch_Array($query);
    $datay[] = $result["count(*)"];    // počet přístupů v jednotlivých dnech
endfor;

// data pro osu X
$datax = Array("Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle");

// graf (velikost) a měřítko
$graph = new Graph(400,200);
$graph->SetScale("textlin");

$graph->img->SetMargin(40,20,30,30);    // velikost okrajů
$graph->SetMarginColor("oldlace");    // barva pozadí grafu
$graph->SetShadow();    // stín grafu

// nastavení titulku (font, barva)
$graph->title->Set(Win_Iso("Denní návštěvnost"));
$graph->title->SetFont(FF_FONT2,FS_BOLD);
$graph->title->SetColor("darkred");

// nastavení fontů u obou os
$graph->xaxis->SetFont(FF_FONT1,FS_NORMAL);
$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10);

// popisky na ose X
$graph->xaxis->SetTickLabels($datax);

// sloupcový graf
$bplot = new BarPlot($datay);

$bplot->SetWidth(0.6);    // šířka sloupců
$bplot->SetFillGradient("gold4","gold2",GRAD_HOR);    // nastavení barevného přechodu u sloupců
$bplot->SetColor("navy");    // barva rámečku sloupců

// přidej sloupcový graf
$graph->Add($bplot);

// zobraz graf
$graph->Stroke();

Příštím dílem, ve kterém dokončíme vytváření profesionálních grafů, bude seriál prozatím ukončen a konečně si budete moci kompletní aplikaci stáhnout.

Předchozí díly:

Statistika přístupů v PHP – kalendář
Statistika přístupů v PHP – hodinová a denní návštěvnost
Statistika přístupů v PHP – regionální lokalizace
Statistika přístupů v PHP – domény nejvyšší úrovně
Statistika přístupů v PHP – vyhledávací fráze
Statistika přístupů v PHP – odkud přicházejí návštěvníci
Statistika přístupů v PHP – rozlišení a barevná hloubka
Statistika přístupů v PHP – detekce operačního systému
Statistika přístupů v PHP – detekce prohlížeče
Statistika přístupů v PHP – počet unikátních návštěvníků
Kebrt, Michal (17. 9. 2002)
Diskuze: Statistika přístupů v PHP – sloupcové grafy
2002-09-17 07:40:19VaKuSuuuper
2002-09-17 12:11:42GaboPokracovania?
2002-09-17 12:12:46GaboPokracovania?
2002-09-17 12:13:57The KingPár drobností
2002-09-17 19:57:30To bys chtěl vědět, co?Minuje......
2002-09-18 21:54:17Adam Hakengrafy
2004-02-20 19:49:14DavidSloupcové grafy - problém