Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Disegnare grafici in Perl
Scritto da Cosmos Puglisi il 22-05-2009 ore 11:23
Intel Cluster Studio XE
Quante volte siamo costretti a creare grafici per compiacere le manie statistiche del nostro boss, e quante volte, per questo motivo, siamo costretti a trasportare dati da un file a un software tipo Microsoft Excel o GnuPlot. Sarebbe molto meglio se il tutto fosse automatizzato da uno script, magari lo stesso che utilizziamo per prelevare i dati.

Se lo script è stato scritto in Perl, abbiamo uno strumento per fare tutto in un sol colpo, ovvero Chart, uno dei tanti moduli di CPAN: scarichiamo l'occorrente con cpan Chart::Base e aiutiamoci con un articolo di Peyton McCullough per capire i fondamenti di questo strumento.

Per utilizzare questa collezione di moduli è necessario per prima cosa instanziare l'oggetto e indicare, in pixel, le dimensioni finali del nostro grafico.
  1. se Chart::Lines;
  2. my $chart = new Chart::Lines(600, 400);
  3.  
  4. my @data = ( [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug','Sep', 'Oct', 'Nov',,Dec' ], [ 46, 50, 56, 61, 67, 73, 79, 79, 74, 63, 51, 46 ],);
  5.  
  6. $chart->png('temps.png', @data);
La funzione png(), come si evince, è quella che permette di disegnare i dati memorizzati nell'array @data, in cui le stringhe costituiscono i valori delle ascisse, mentre il primo parametro passato a png(), (temps.png), è il nome dell'immagine creata. Lo stesso risultato è ottenibilie usando lo stralcio seguente:
  1. $chart->add_dataset('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul','Aug', 'Sep', 'Oct', 'Nov', 'Dec');
  2. $chart->add_dataset(46, 50, 56, 61, 67, 73, 79, 79, 74, 63, 51, 46);
  3. $chart->add_dataset(37, 39, 41, 44, 49, 53, 57, 58, 55, 48, 42, 37);
  4. $chart->png('temps.png');
In questo caso abbiamo creato un grafico con due linee statistiche e senza creare un array. Nonostante tutto, il risultato è ancora un po' scarno, ma noi possiamo rendere migliore l'immagine finale aggiungendo il titolo e le etichette agli assi in uno dei due modi seguenti:
  1. $chart->set('title' => 'Average Monthly Temperatures for Portland,OR', 'x_label' => 'Month', 'y_label' => 'Temperature (*F)', );
  1. my %property;
  2. $property{'title' } = 'Average Monthly Temperatures for Portland, OR';$property{'x_label'} = 'Month';
  3. $property{'y_label'} = 'Temperature (*F)';
  4. $chart->set(%property);
Il secondo metodo, tramite il vettore %property, è più comodo, poiché ci permette anche di definire i valori di massimi e minimi delle ordinate, l'intervallo di valori da visualizzare, la legenda e i colori per i grafici come vediamo nell'esempio qui riportato:
  1. $property{'min_val'} = 0;
  2. $property{'include_zero'} = 'true';
  3. $property{'max_val'} = 90;
  4. $property{'integer_ticks_only'} = 'true';
  5. $property{'skip_int_ticks'} = 5
  6. $property{'legend_labels'} = [ 'High', 'Low' ];
  7. $property{'colors'} = {'dataset0' => [255, 0, 0], 'dataset1' => [0, 0,255]};
Tutto qui? Ovviamente no, questo è solo un modo per disegnare i grafici; esso tuttavia mostra le funzioni generiche per la visuallizzazione e il rendering. Se servisse un grafico a barre, basterebbe modificare solo l'inizializzazione del grafico, senza altre modifiche di sorta.
  1. use Chart::Bars;
  2. my $chart = new Chart::Bars(600, 400);
Precedente: Pro Drupal Development (seconda edizione)
Successiva: Prime dimostrazioni pratiche di USB 3.0
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.341 secondi.