Scritto da davidonzo il 24/05/2007, in OpenSource
ATTENZIONE!
L'articolo che stai leggendo è stato scritto 1722 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
L'articolo che stai leggendo è stato scritto 1722 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
E dopo la libreria per la creazione facile di file in PDF via PHP, oggi vediamo come creare grafici con PHP ottenendoli come output immagine!E' proprio quello che fa Libchart. Ottimo prodotto open source, facile da usare e molto versatile.
Premetto che per un corretto utilizzo delle funzioni comprese in Libchart è necessario aver installato e configurato a dovere la libreria GD.
Cosa è possibile fare?
Di seguito una lista delle funzioni principali (per nulla esaustiva):
- Grafici a linea continua;
- Grafici ad Istogramma verticale e orizzontale;
- Grafici a torta (!!!);
- Inserimento di un titolo in ogni grafico;
- Inserimento coordinate X - Y in formato testo.
La semplicità è quasi disarmante. Basta includere il core file della libreria nel file che creerà l'output e mandare in loading la classe di riferimento del tipo di grafico che volete produrre.
include 'libchart/libchart.php';
$chart = new VerticalChart; //Istogramma verticale
$chart = new LineChart; //Grafico a linea
$chart = new PieChart; //Grafico a torta
$chart = new HorizontalChart; //Istogramma orizzontale
$chart = new VerticalChart; //Istogramma verticale
$chart = new LineChart; //Grafico a linea
$chart = new PieChart; //Grafico a torta
$chart = new HorizontalChart; //Istogramma orizzontale
Già da qui è possibile specificare le dimensioni che deve avere l'immagine risultante. Se volete ottenere un grafico a torta di dimensioni 300X300 pixel scriverete.
include 'libchart/libchart.php';
$chart = new PieChart(300,300);
$chart = new PieChart(300,300);
Come aggiungo un punto nel grafico?
Si utilizza addpoint e la classe Point. E' possibile inserire non solo il valore del punto di riferimento, ma anche il riferimento testuale. Ipotizzando di studiare il fatturato dei primi 4 mesi dell'anno, andrete a scrivere qualcosa del genere.
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 30));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 30));
Se voglio dare un titolo al grafico?
Niente di più semplice :) . Basterà un:
$chart->setTitle("Fatturato primo quadrimestre 2007");
Come creo l'immagine vera e propria?
Si utilizzerà la funzione render(). Questa prevede una doppia opzione di output:
1 - File PHP come output diretto immagine.
Ovvero nel caso in cui vogliamo che l'output corrisponda al file php. In questo caso useremo il render in default con:
$chart->render();
Badate bene però che in questo caso è necessario aver inviato un header coerente con l'output desiderato. Nello specifico:
header('Content-Type: image/png');
2 - Salvataggio dell'output in file separato dallo script.
Con questa seconda opzione possiamo decidere di salvare il file di output in una directory a nostra scelta. L'uso di render() sarà il seguente:
$chart->render("grafici/grafico1.png");
Ovviamente la directory di destinazione deve avere i permessi di scrittura debitamente settati.
I due casi in concreto.
Vediamo ora di riepilogare il tutto scrivendo per intero il codice relativo ai due casi proposti.
1 - Generazione diretta e volatile
header('Content-Type: image/png');
include "libchart/libchart.php";
$chart = new HorizontalChart(300, 300);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();
include "libchart/libchart.php";
$chart = new HorizontalChart(300, 300);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();
Al loading del file via richiesta http visualizzeremo il grafico.
2 - Salvataggio del grafico in directory
include "libchart/libchart.php";
$chart = new HorizontalChart(300, 300);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render("grafici/grafico1.png");
echo '<img src="grafici/grafico1.png" alt="grafico" />';
$chart = new HorizontalChart(300, 300);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render("grafici/grafico1.png");
echo '<img src="grafici/grafico1.png" alt="grafico" />';
In questo caso l'ultima riga è necessaria per visualizzare il risultato finale, dato che impostando il render() sull'output esterno, l'output dello script php rimarrà di base http.
Esempi pratici
1 - Istogramma Orizzontale
header('Content-Type: image/png');
include "libchart/libchart.php";
$chart = new HorizontalChart(500, 250);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();
include "libchart/libchart.php";
$chart = new HorizontalChart(500, 250);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();

2 - Istogramma Verticale
header('Content-Type: image/png');
include "libchart/libchart.php";
$chart = new VerticalChart(500, 250);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();
include "libchart/libchart.php";
$chart = new VerticalChart(500, 250);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();

3 - Linea
header('Content-Type: image/png');
include "libchart/libchart.php";
$chart = new LineChart(500, 250);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();
include "libchart/libchart.php";
$chart = new LineChart(500, 250);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();

4 - Torta
header('Content-Type: image/png');
include "libchart/libchart.php";
$chart = new PieChart(500, 250);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();
include "libchart/libchart.php";
$chart = new PieChart(500, 250);
$chart->addPoint(new Point("Gennaio 2007", 1000));
$chart->addPoint(new Point("Febbraio 2007", 1780));
$chart->addPoint(new Point("Marzo 2007", 3498));
$chart->addPoint(new Point("Aprile 2007", 3000));
$chart->setTitle("Fatturato primo quadrimestre 2007");
$chart->render();

Gli esempi proposti sono di pura accademia. Sta a voi, con riferimento ai dati che volete elaborare, impostare uno script che aggiunga dinamicamente i punti del grafico.
Io l'ho trovato molto utile. Riesco facilmente a sapere in ogni momento:
- Il fatturato mensile in termini di andamento (grafico linea);
- Il fatturato per responsabile (torta);
- Il fatturato per macrocategorie di clienti (torta);
- Classifica prodotti venduti (istogramma verticale);
- Classifica clienti più danarosi (istogramma orizzontale).

















