Scritto da davidonzo il 24/05/2007, in OpenSource
ATTENZIONE!
L'articolo che stai leggendo è stato scritto 594 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
LibchartE 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.
Come la utilizzo?
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

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);

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));

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();

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" />';

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();

libciart

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();

vertical

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();

line

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();

torta

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).
Buon divertimanto :)
Hai trovato l'articolo interessante?
Sottoscrivi il Feed RSS per essere informato automaticamente degli ultimi aggiornamenti!
 
.Commenti rss
# 1
senza offesa... ma dove si scarica questa cavolo di libreria che non trovo da nessuna parte??? : - (
Di roby  (Inviato il 10/06/2007 @ 13:11:30)
# 2
Da qui: http://naku.dohcrew.com/libchart/pages/download/
Di davidonzo  (Inviato il 10/06/2007 @ 15:22:33)
# 3
non sono riuscito alla tentazione del cynar!! bravo comunque continua così!
Di Bubu  (Inviato il 19/10/2007 @ 20:55:08)
# 4
Grazie Bubu :)
Di davidonzo  (Inviato il 19/10/2007 @ 22:12:50)
# 5
ke tajo
Di bella  (Inviato il 31/01/2008 @ 17:34:36)
# 6
ma se non funziona col database a che serve?
Di prinart  (Inviato il 02/10/2008 @ 14:34:40)
# 7
I dati dal database li puoi estrapolare con un driver adeguato.

Gli esempi riportati sono solo dimostrativi. Normale che poi si dovrà fare in modo di evocare le funzioni passandogli i dati dei risultati di una query.
Di davidonzo  (Inviato il 02/10/2008 @ 14:58:33)


I commenti possono essere moderati.
Se non lo vedi comparire subito non reinserirlo più volte.
Grazie per la gentile collaborazione.