Il grafico simula l'andamento di un ipotetico titolo azionario per 30 giorni.
I valori del titolo sono creati in modo casuale in un range fra 1 e 550 compresi.
Questi valori si rinnovano automaticamente ad ogni lancio dello script dando grafici sempre diversi.
Vengono disegnate sull'asse x i giorni, e sull'asse y la scala dei valori.
Parallele all'asse x, sono disegnate linee intermedie per meglio leggere il grafico.
Il font usato è arial.ttf
<?php
$Giorno = array(); // dichiara array dei giorni
$gg=1; // giorno del mese
for($x=1; $x<31; $x++)
{
$NumeroMinimo = 1; $NumeroMassimo = 550;
$n = rand($NumeroMinimo,$NumeroMassimo);
$Prezzo[$gg] = $n; // immette in ciascun giorno il prezzo come valore casuale fra 1 e 100
$gg++;
}
// Crea immagine truecolor di 350x280 pixel
$Immagine =
imagecreatetruecolor(1240,600 );
// colore di fondo nel grafico
$Grigio =
imagecolorallocate($Immagine, 200, 200, 200);
// Riempire lo sfondo con il colore selezionato in precedenza
imagefill($Immagine, 0, 0, $Grigio);
$Rosso =
imagecolorallocate($Immagine,255,0,0); // valori ed etichette sulle coordinate
$Verde =
imagecolorallocate($Immagine,0,102,0); // Linea del grafico
$Nero =
imagecolorallocate($Immagine,0,0,0); // colore per ascisse ed ordinate
imagesetthickness($Immagine, 3); // larghezza tratto di 3 pixel
// disegna ascisse ed ordinate
imageline($Immagine, 40, 5, 40, 560, $Nero ); // X
imageline($Immagine, 40, 560, 1240, 560, $Nero ); // Y
imagesetthickness($Immagine, 1); // larghezza tratte di 1 pixel
$Giallo =
imagecolorallocate($Immagine, 255, 255, 0);
// linee orizzontali tratteggiate gialle
$style = array(
$Giallo, $Giallo, $Giallo, $Giallo, $Giallo,
IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT);
imagesetstyle($Immagine, $style);
$S = 500;
for($y=60;$y<470;$y+=100)
{
imagestring($Immagine, 3, 18, $y, $S , $Giallo); // valori linee gialle tratteggiate
imageline($Immagine, 30, $y, 1240, $y, IMG_COLOR_STYLED); // linee gialle tratteggiate
$S-=100;
}
// scrittura di testi font, angolo rotazione, posizione x di partenza
$DimensioneFont = 10; $Font = "font/arial.ttf"; $Angolo = 0; $xStart = 40;
// scala x, separatori dei giorni del mese giorni del mese e numero giorno
for($x=1;$x<31;$x++)
{
imageline($Immagine, $x*40, 560, $x*40, 580, $Nero ); // separatore
// disegna numero giorni del mese
imagettftext($Immagine, $DimensioneFont, $Angolo, $x*40+15, 580, $Nero, $Font, $x);
}
// Scrive valore delle coordinate
imagestring($Immagine, 5, 600, 583, "G I O R N I" , $Rosso);// x in orizzontale
imagestringup($Immagine, 5, 2, 350, "V A L O R I" , $Rosso);// y in verticale dal basso verso l'alto
// inizio della scrittura della linea del grafico e dei valori
$xP = 0; $yP = 0; // conterrà valore del giorno Precedente
$xC = 0; $yC = 560;// conterrà valore del giorno Corrente
$DimensioneFont = 8;
for($gg=1;$gg<31;$gg++) // scorre l'array dei prezzi/giorno
{
$xP = $xC; $xC = $gg*40+15;
$yP = $yC; $yC = 560 - $Prezzo[$gg];
imagesetpixel($Immagine, $gg*40+15,$Prezzo[$gg], $Nero);
imageline($Immagine, $xP,$yP,$xC,$yC, $Verde); // Linea del grafico
// prezzo giornaliero
imagettftext($Immagine, $DimensioneFont, $Angolo, $gg*40+18, 560-$Prezzo[$gg], $Rosso, $Font, $Prezzo[$gg]);
}
//
imagepng($Immagine); // al browser
imagepng($Immagine, "es_97_grafico_andamento_azionario.png"); // salva
imagedestroy($Immagine);// libera memoria
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title> NomeFile </title>
</head>
<body>
<!-- legge il grafico appena creato e lo mette a video -->
<img src="NomeFile.png">
</body>
</html>
Risultato: