Generare grafici dinamici con PHP e Google Image Charts API

Google Image Charts API è una soluzione molto comoda, semplice ed efficace per creare grafici su un sito web. Il servizio è completamente gratuito e utilizzabile anche su prodotti commerciali, anche se ovviamente ha delle limitazioni d’uso che impediscono alcuni utilizzi impropri, ad esempio non è possibile utilizzare le API al di fuori di siti web o in applicazioni client.

Come funziona

Il meccanismo per creare i grafici è incredibilmente semplice, ma nonostante questa semplicità consente di creare un innumerevole varietà di grafici, tutti molto gradevoli graficamente e di immediata comprensione. Il procedimento per ottenerli è il seguente:

  • dopo aver scelto il tipo di grafico, i colori, eccetera, bisogna creare una URL verso l’indirizzo http://chart.apis.google.com/chart, con accodati tutti i parametri necessari;
  • creare un tag <img> inserendo la URL definita sopra nell’attributo src.

Vediamo qualche esempio, partendo dal più classico grafico a barre:

 

La URL che lo genera è la seguente:

http://chart.apis.google.com/chart?chs=300×200&cht=bvg&chd=t:10,50,60,40&chbh=a

Analizziamo i parametri utilizzati:

  • chs=300×200: specifica una dimensione di 300 x 200 pixel;
  • cht=bvg: imposta il tipo a “grafico a barre con raggruppamento”;
  • chd=t:10,50,60,40: specifica che i dati sono nel formato Basic Text Format, ovvero sono compresi fra 0 e 100;
  • chbh=a: imposta la largezza automatica delle colonne. Senza questo parametro la larghezza verrebbe impostata di default a 23 pixel.

Cliccando sul link sopra, potrete verificare di persona come venga caricata un’immagine di tipo PNG nella finestra del browser; a questo punto è possibile addirittura modificare a piacimento i parametri e vederne immediatamente l’effetto sul grafico! Ciò è molto utile e aiuta a capire, tuttavia c’è un modo molto più semplice per sperimentare con le Image Chart API, ovvero utilizzare il comodo Chart Wizard presente nella documentazione stessa. Tramite questo strumento è possibile esplorare tutti i tipi di grafici e trovare quello giusto per i propri scopi.

Integrazione con PHP

L’estrema versatilità di questo approccio permette di dotare qualsiasi sito, in particolare quelli gestiti da PHP, Java o altro, di funzionalità di visualizzazione dinamiche, ovvero basate su dati che cambiano spesso.

Supponiamo ad esempio di avere un database contenente i dati di vendita di alcuni prodotti, con poche righe di PHP possiamo generare al volo il relativo report con grafico:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title>Esempio Google Image Chart API</title>
<style type="text/css">
table, th, td {
  border: 1px solid #ccc;
}
table {
  border-collapse: collapse;
}
td.number {
  text-align: right;
  font-family: "Courier New";
  font-size: 10pt;
}
</style>
</head>
<body>
<?php
// array delle etichette
$labels = array('gen-mar', 'apr-giu', 'lug-set', 'ott-dic');
// categorie:
$categories = array('Prodotto X', 'Prodotto Y');
// array dei dati: ogni sotto-array contiene una delle due serie
$data = array(
  array(10.0, 50.2, 60.6, 40.3),
  array(80.5, 65.1, 70.8, 40.0)
);

// creazione della URL
$url = 'http://chart.apis.google.com/chart?';
// vari parametri del grafico (cfr. documentazione)
$url .= 'chtt=' . urlencode('Riepilogo vendite');
$url .= '&amp;chxt=' . 'y,x';
$url .= '&amp;chbh=' . 'a';
$url .= '&amp;chs=' . '450x200';
$url .= '&amp;cht=' . 'bvg';
$url .= '&amp;chco=' . 'A2C180,FF9900';
// serie dei dati:
$url .= '&amp;chd=t:';
// prima serie
$url .= implode(',', $data[0]);
// seconda serie
$url .= '|';
$url .= implode(',', $data[1]);
// etichette
$url .= '&amp;chxl=1:|' . implode('|', $labels);
// crea una legenda
$url .= '&amp;chdl=' . implode('|', $categories);
?>
<img src="<?echo $url;?>" width="450" height="200" />

<table style="width: 450px">
  <thead>
    <tr>
      <th>&nbsp;</th>
<?php
foreach($labels as $label) {
  echo '<th align="center">' . htmlspecialchars($label, ENT_NOQUOTES, 'UTF-8') . '</th>';
}
?>
    </tr>
  </thead>
  <tbody>
<?php
for($i = 0; $i < sizeof($categories); $i++) {
  ?>
  <tr>
<?php
    echo '<th>' . htmlspecialchars($categories[$i], ENT_NOQUOTES, 'UTF-8') . '</th>';
    foreach($data[$i] as $value) {
      echo '<td class="number">' . $value . '</td>';
    }
?>
  </tr>
  <?php
}
?>
  </tbody>
</table>
<?
?>
</body>
</html>

Il risultato è un report immediato, facile da capire e gradevole dal punto di vista grafico:

Sviluppi

Come al solito Google, dopo aver creato un eccezionale strumento per gli sviluppatori, non si accomoda sugli allori ma spinge verso nuove e più avanzate tecnologie. Così è stato anche per le Chart API, che ora sono disponibili come liberie Javascript per creare addirittura grafici interattivi dotati di aree sensibili, popup e animazioni. Nel prossimo appuntamento vedremo come utilizzare anche queste.

Links