Bejárat > PHP programozás > A rajzolás és a PHP IV.-Vonal diagram

A rajzolás és a PHP IV.-Vonal diagram

Vonal diagram
Ezen írásom egy Vonal diagram rajzolásáról szól. Ha nem vagy tapasztalt php-s akkor célszerű elolvasni a N1 írásomat: A rajzolás és a PHP I.. Mint előző példáim nagy része, ez is egy hónapos ‘statisztikai’ példát szemléltet. Érdemes az előző írásba is belenézni, ahol a kör rajzolás menetét írtam le, mert itt van kör is :), itt a link az előző rajzolós cikkemhez: A rajzolás és a PHP III. A Kör
Íme a kód:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
    header("Content-type: image/gif");
    $width=520;          //Szélesség
    $height=200;         //Magasság
    $kep = imagecreate( $width, $height );
    $hatter = imagecolorallocate($kep, 255,255,255); //Háttér szine
    $piros = imagecolorallocate($kep, 255,0,0 );
    $idov = imagecolorallocate($kep, 85,82,85 );     //Idővonal
    $kiosztas  = imagecolorallocate($kep, 214,214,214 ); //Kiosztás
    //Idővonal függőleges
    imageline($kep, 2, 0, 2, $height, $idov);
    //Idővonal vizsintes
    imageline($kep, 2,$height-1,$width, $height-1, $idov);
 
    //Függőleges kiosztás
        //Fele
        imageline($kep, 2, $height/2, $width, $height/2, $kiosztas);
        //Háromnegyede
        imageline($kep, 2, $height/4, $width, $height/4, $kiosztas);
        //Háromnegyed
        imageline($kep, 2, $height-($height/4), $width, $height-($height/4), $kiosztas);
        //Negyed
        //imageline($kep, 2, 140, 498, 140, $kiosztas2);
 
    $max=200;          //Ez a max amiből választhat
    $x=5;
    $y1=200;
    $y2=rand($max,10);  //Véletlenszerű kezdő választás
        while($t<31)
        {
 
                imageline($kep, $x, $y1, $x+15, $y2, $piros);
 
                imagefilledarc($kep, $x, $y1, 10, 10, 0, 360 , $piros, IMG_ARC_PIE);
                $y1=$y2;
                $y2=rand($max,10);
                $x=$x+15;
 
        $t++;
        }
    imagegif($kep);
    imagedestroy($kep);
?>

Szerintem a kód nagy része érthető, ezért csak a while ciklusban lévő forrást magyarázom.

    $max=200;      
    $x=5;
    $y1=200;
    $y2=rand($max,10);

A $max változó az az érték ami maximum lehet a magasságnál. Ha adatbázis lekérdezést használsz, itt célszerű lenne egy max függvénnyel megnézni, hogy mekkora lesz a max érték. Ha nagyobb mint a magasság, akkor arányosan ellehet osztani.
$x változó, ez az első pont behúzásának adja meg az értéket, a továbbiakban ez a változó tolja beljebb a kapcsolódási pontokat.
$y1 értéke mindig a pont-ból 1. értéke. Itt most a kezdő pont első paramétere
$y2 értéke véletlenszerűen meghatározott érték. A 10-es azt jelenti, hogy felülről 10 px szabad hely marad, ha az 0 akkor teljesen a kép tetejéig fog érni

Belépünk a while ciklusba.

 while($t<31)
        {
 
                imageline($kep, $x, $y1, $x+15, $y2, $piros);
 
                imagefilledarc($kep, $x, $y1, 10, 10, 0, 360 , $piros, IMG_ARC_PIE);
                $y1=$y2;
                $y2=rand($max,10);
                $x=$x+15;
 
        $t++;
        }

$t változó az idő. Itt most 31 ig megy el.
imageline(Kép,’ból x’, ‘ból y’, ‘ig x’, ‘ig y’ , ‘szín’) függvény megrajzolja nekünk a vonalakat.
Ki karikák a kapcsolódási pontokra, hogy jól nézzen ki 😀
imagefilledarc(‘Kép’, Középpont x, középpont y, szélesség, magasság, ból szög, ig szög , szín, style);
$y1=$y2; ez azért van, hogy legyen miből kiindulni a következő vonalnak.
$y2=rand($max,10); Következő pont magassága (Ide jöhet lekérdezés)
$x=$x+15; behúzás növelése

$t++ a számlálónk

Röviden ennyi, ha kérdés van tedd fel!

  1. Miki
    július 24th, 2009 16:40-nél | #1

    Sziasztok!

    Segítségeteket szeretném kérni.
    A feladatom:
    xml-ből olvassuk be az adatokat: dátum, értékfajta, értéke. Ezeket kellene megjeleníteni grafikonon értékfajtaként: x koordináta idő szerint, y koordináta érték szerint.
    azaz: egy értékfajtához tartozó érték egy adott pillanatban
    pl. időrendben a szaturációhoz tartozó értékek

    09-05-25 12:22:10
    88 ; szaturacio

    09-05-25 16:40:35
    94 ; szaturacio

    Hogy lenne a legkönnyebben megvalósítani a megjelenítését?
    Milyen formátumú (többdimenziós???) tömbökbe tároljuk, figyelembe véve a időrendiséget, h arányos legyen?

    köszi!!!

  2. július 24th, 2009 18:29-nél | #2

    @Miki
    Szia!

    Köszi a kérdést!
    Én a következőt csinálnám:
    Amikor kiszedet xml-ből az adatokat, akkor megvizsgálod az értékfajtát, és az szerint teszed be egy többdimenziós tömbbe.
    Pl a vizsgálatra
    if($kivagott == “szaturacio”){
    $szaturacio[$i][“datum”] = $datum;
    $szaturacio[$i][“meres”] = $meres;
    $i ++;
    }else if($kivagott == “valamimas”){
    $valamimas[$j][“datum”] = $datum;
    $valamimas[$j][“meres”] = $meres;
    $j ++;
    }

    Amikor ezeket a tömböket megtöltötted, így írod ki:

    $i = 0;
    while($i < count($szaturacio)){ echo $szaturacio[$i]["datum"]." : ".$szaturacio[$i]["meres"]."
    “;
    $i++;
    }
    Elvileg így jó is lesz!

    Irdd majd meg mire jutottál!

  3. Zsolt
    január 30th, 2011 13:48-nél | #3

    Üdv mindenkinek!

    Segítséget szeretnék kérni egy grafikon rajzoláshoz.

    Van egy játék szerverem ami MySQL-ben tárolja az adatait, többek közt azt is hogy ki online és ki nem. Ezt egy `characters` nevű db ben és egy `online` nevű oszlop ban az értékei pedig lehetnek 0, 1, 2.

    Na most jön a csavar :D.

    Ebből szeretnék egy statisztikai grafikont csinálni, napi heti és havi beosztási lehetőséggel.

    Most ha ez 3 külön script az nem gond, viszont automatikusan kellene figyelnie a változásokat úgy hogy a lehető legkisebb terhet jelentse a MySQL-nek.
    Nem vagyok programozó úgyhogy nem tudom egyáltalán képes-e erre a PHP.

    Valami ilyesmit szeretnék csinálni, igaz ez CGI-ben készült. -> “mysticworld.hu/cgi-bin/systemgraph.cgi?7d-lionnausercount”

  1. Még nincsenek visszakövetések