[successivo] [precedente] [inizio] [fine] [indice generale]


Sezione 12.   Utilizzo programmatico

Il punto di forza dei programmi non interattivi è quello di poter essere facilmente utilizzati come anelli di una catena di strumenti o processi; la connessione delle varie parti può essere gestita semplicemente mediante generiche pipeline, o addirittura mediante specifici programmi «wrapper», progettati per uno scopo preciso, che costruiscano programmaticamente l'input da far elaborare.

12.1   «njgraph.pl»

Un esempio interessante è il programma njgraph.pl di Neil Spring. Si tratta di un piccolo sorgente in Perl che in pratica realizza una specie di programma frontale per Jgraph: esso legge dallo standard input una singola serie di dati da rappresentare graficamente, e dopo averli opportunamente passati a Jgraph per l'elaborazione invoca GV, a meno che lo standard output non venga rediretto. Il programma njgraph.pl riconosce altresì gli attributi marktype, linetype e color (e relativi valori) facoltativamente presenti sulla riga di comando, e li posiziona opportunamente all'interno del sorgente Jgraph prima dell'elaborazione.

La figura 12.1 illustra qualche esempio di invocazione del programma njgraph.pl, mentre la figura 12.2 ne illustra l'output.

Figura 12.1. Invocazione del programma njgraph.pl.

njgraph.pl[Invio]

automatically invoking gv; redirect if you want something else

1 7 2 3 3 8 4 6 5 3 6 2 7 4 8 7 9 5 10 7[Invio]

[Ctrl d]

[q]

njgraph.pl marktype box linetype dashed color 1 0 0[Invio]

automatically invoking gv; redirect if you want something else

1 7 2 3 3 8 4 6 5 3 6 2 7 4 8 7 9 5 10 7[Invio]

[Ctrl d]

[q]

Figura 12.2. Output del programma njgraph.pl.

njgraph-output-1 njgraph-output-2

12.2   «data2multijgr.sh». Qualche nota autobiografica

Pochi giorni dopo la pubblicazione del presente articolo, ho ricevuto un messaggio di posta elettronica da parte di un lettore. Ecco il frammento rilevante:

...

Per quanto riguarda la creazione dei grafici devo creare un grafico con
circa 200 barre orizzontali e pertanto devo creare un grafico che si
sviluppi su più pagine mettendo un certo numero di barre per ogni
pagina.

Distinti saluti

...

Ad ulteriore conferma della versatilità degli strumenti come Jgraph, ho realizzato in poco più di mezz'ora(1) il programma data2multijgr.sh (il programma dovrebbe essere disponibile qui: <allegati/xs/data2multijgr_sh>). Il programma, pur essendo molto rudimentale, risolve il problema del lettore. Eccone la sintassi:

data2multijgr.sh [opzione] ...

ed eccone un utilizzo tipico:

cat data[Invio]

18 4 15 0 2 0 16 3 7 11 12 0 1 9 5 19 8 19 0 13 14 0 19 9 12 3 11 3 10 18
17 0 14 4 1 16 5 9 11 12 1 3 4 14 13 1 13 13 1 5 6 7 18 17 16 10 13 19 13
15 17 3 15 3 7 8 19 4 18 3 16 11 6 13 5 11 14 19 4 15 16 2 2 14 12 10 5 17
9 10 12 18 5 19 13 13 8 13 17 18 8 6 9 14 19 14 6 13 5 2 1 2 17 15 8 1 18
13 18 19 4 2 18 9 13 3 14 1 8 4 11 16 2 0 11 13 7 9 18 4 11 19 18 0 7 7 1 5
12 11 16 8 5 6 18 19 10 4 12 18 0 4 15 2 16 6 15 15 15 6 0 18 5 10 11 4 17
4 1 2 16 18 10 1 4 0 0 14 5 5 13 17 9 8 0 17 6 7 13 13

cat data | data2multijgr.sh -d 15 -t "Grafico multiplo" -X 40 -x -10 > multi.jgr[Invio]

cat multi.jgr[Invio]

newgraph
title fontsize 50 : Grafico multiplo (1/14)
xaxis min -10 max 40 size 5 hash_labels fontsize 30
yaxis min -1 max 15 size 8 hash_labels fontsize 30
newcurve marktype ybar cfill 1 0 0 marksize 1 0.75 pts
18 0 4 1 15 2 0 3 2 4 0 5 16 6 3 7 7 8 11 9 12 10 0 11 1 12 9 13 5 14 
newpage
newgraph
title fontsize 50 : Grafico multiplo (2/14)
xaxis min -10 max 40 size 5 hash_labels fontsize 30
yaxis min 14 max 30 size 8 hash_labels fontsize 30
newcurve marktype ybar cfill 1 0 0 marksize 1 0.75 pts
19 15 8 16 19 17 0 18 13 19 14 20 0 21 19 22 9 23 12 24 3 25 11 26 3 27 10 28 18 29 
newpage
newgraph
title fontsize 50 : Grafico multiplo (3/14)
xaxis min -10 max 40 size 5 hash_labels fontsize 30
yaxis min 29 max 45 size 8 hash_labels fontsize 30
newcurve marktype ybar cfill 1 0 0 marksize 1 0.75 pts
17 30 0 31 14 32 4 33 1 34 16 35 5 36 9 37 11 38 12 39 1 40 3 41 4 42 14 43 13 44 
newpage
newgraph

...

cat multi.jgr | jgraph -P > multi.ps[Invio]

Il file multi.ps che così si ottiene è un file PostScript composto da più pagine ciascuna contenente un grafico relativo a un segmento specifico dei dati (la figura 12.6 riporta per brevità solamente le prime tre pagine).

Figura 12.6. Jgraph: le prime tre pagine di una grafico multiplo, distribuito su 14 pagine, realizzato grazie al programma data2multijgr.sh.

f-jgraph-data2multijgr-sh-esempio-1 f-jgraph-data2multijgr-sh-esempio-2 f-jgraph-data2multijgr-sh-esempio-3

La tabella 12.7 riassume le opzioni del programma. Chiunque fosse interessato è invitato adattare il programma data2multijgr.sh alle proprie esigenze, o aggiugervi delle caratteristiche più sofisticate (magari inviando una copia del programma modificato al sottoscritto).

Tabella 12.7. Opzioni del programma data2multijgr.sh.

Opzione Descrizione
{--dataperpage | -d} dati_per_ogni_pagina
Stabilisce quanti dati vengono inseriti nel grafico per ciascuna pagina.
{--title | -t} titolo
Stabilisce il titolo da dare al grafico.
{--xmin | -x} valore_minimo
Stabilisce il valore minimo sull'asse delle ascisse.
{--xmax | -X} valore_massimo
Stabilisce il valore massimo sull'asse delle ascisse.
{--ymin | -y} valore_minimo
Stabilisce il valore minimo sull'asse delle ordinate.
{--ymax | -Y} valore_massimo
Stabilisce il valore massimo sull'asse delle ordinate.
{--cfcolor | -c} componente_rossa \
  \ componente_verde \
  \ componente_azzurra
Imposta il colore delle barre, codificato mediante la terna RGB indicata.
{--landscape | -l}
Fa in modo che il risultato sia orientato in modo orizzontale. Il modo predefinito è quello verticale.
{--psout | -p}
Produce direttamente un file PostScript (attraverso Jgraph).
{--view | -v}
Visualizza direttamente il grafico (atraverso GV).

Informatica per sopravvivere 2006.02.18 --- Copyright © 2004-2006 Massimo Piai -- <pxam67 (ad) virgilio·it>


1) A dire il vero il programma è stato successivamente limato, ma il prototipo funzionante era pronto dopo il tempo indicato (NdA).


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome utilizzo_programmatico.html

[successivo] [precedente] [inizio] [fine] [indice generale]

Valid ISO-HTML!

CSS validator!