¡Ya estamos en Twitter!

Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad

Creando gráficos con Perl

por Uriel Lizama

Introducción

Hace poco me llego un email de una persona que tenia dudas acerca de como crear gráficos de barras, gráficas circulares, etc. Así que decidí crear este tutorial para que puedan hacer sus propios gráficos con perl.

Preparando Todo

Para este tutorial vamos a usar el módulo llamado GD::Graphs el cual pueden encontrar en CPAN:

http://search.cpan.org/CPAN/authors/id/M/MV/MVERB/GDGraph-1.43.tar.gz

También hice un zip con todos los archivos necesarios para poder usar el módulo. Todo lo que tienen que hacer es bajar el zip y extraer su contenido en el directorio de "/lib" en su perl.

http://perlenespanol.com/pub/GD.zip

Recuerden extraer todos los archivos usando el nombre de los directorios que ya vienen. Si no puedes extraer los archivos en tu distribución de perl, lee el tutorial acerca de como ejecutar módulos de perl sin tener que instalarlos.

Si ya tienes todo listo, sigamos con el tutorial.

Gráfica de Barras

Como primer ejemplo vamos a crear una gráfica de barras. Digamos que queremos hacer una gráfica de barras con el número de visitas que tiene "Perl en Español". Lo primero que necesitamos es llamar a los módulos necesarios:

use strict;
use CGI ':standard';
use GD::Graph::bars;

Nota como usamos "GD::Graph::bars" pues queremos hacer una gráfica de barras.

Ahora emepecemos con el código llenando nuestros campos:

my @campos = ('Oct 2003','Nov 2003','Dec 2003','Ene 2004','Feb 2004');

Ahora vamos a hacer nuestro array con los valores. Los dos arrays deben de tener la misma cantidad de elementos, de lo contrario perl nos mostraría un error:

my @valores = ('547','2282','2798','2354','4326');

Muy bien ya tenemos nuestros dos arrays ahora vamos a juntarlos en un array que va a contener los dos arrays y que más adelante le vamos a envíar el módulo:

my @graf = (\@campos, \@valores);

Siempre deben de ir los nombres de los campos primero seguidos por los valores.

Ahora lo que sigue es la linea con la que vamos a crear nuestra gráfica:

my $grafico = GD::Graph::bars->new(500, 300);

Los valores dentro de "new()" son el ancho y el alto que queremos que tenga nuestro gráfico.

$grafico->set(
x_label => 'Mes',
y_label => 'Visitas Totales',
title => 'Visitas Mensuales de "Perl en Español"',
) or warn $grafico->error;

Vemos como el "x_label" es el pequeño titulo que va a poner horizontalmente y el "y_label" es el que va a ir verticalmente. El valor de "title" es como dice su nombre el título de nuestra gráfica.

my $imagen = $grafico->plot(\@graf) or die $grafico->error;

Muy bien ahora si creamos la imagen evíando la referencia a nuestro array de arrays que hicimos anteriormente.

Ahora vien la hora de la verdad, el despliegue de nuestro gráfico:

print "Content-type: image/png\n\n";
print $imagen->png;
exit(1);

Noten como el "Content-type" tiene un valor de "image/png" lo que le dice al navegador que el contenido que sigue es el código de una imagen.

Pueden ver aquí como quedaría este ejemplo.

Código Final


#!/usr/bin/perl -w

use strict;
use CGI ':standard';
use GD::Graph::bars;

my @campos = ('Oct 2003','Nov 2003','Dec 2003','Ene 2004','Feb 2004');
my @valores = ('547','2282','2798','2354','4326');
my @graf = (\@campos, \@valores);

my $grafico = GD::Graph::bars->new(500, 300);

$grafico->set(
x_label => 'Mes',
y_label => 'Visitas Totales',
title => 'Visitas Mensuales de "Perl en Español"',
) or warn $grafico->error;

my $imagen = $grafico->plot(\@graf) or die $grafico->error;

print "Content-type: image/png\n\n";
print $imagen->png;
exit(1);


Gráficas Circulares

Muy bien, ahora usando los mismos valores de el ejemplo anterior, vamos a crear una gráfica de barras. Lo primero que debemos de cambiar es la llamada al módulo de "GD::Graph" que debe de decir:

use GD::Graph::pie;

Ahora el código que tenemos que cambiar también es:

my $grafico = GD::Graph::pie->new(320, 300);

$grafico->set(
title => 'Visitas Mensuales de "Perl en Español"',
'3d' => 1,
) or warn $grafico->error;

Como es lógico la variable "title" es el título de nuestra gráfica, el valor "3d" es si queremos que nuestra gráfica tenga un efecto de 3d.

Ese es todo el código que debemos de cambiar.

Pueden ver aquí como quedaría este ejemplo.

Código Final


#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use GD::Graph::pie;


my @campos = ('Oct 2003','Nov 2003','Dec 2003','Ene 2004','Feb 2004');
my @valores = ('547','2282','2798','2354','4326');
my @graf = (\@campos, \@valores);

my $grafico = GD::Graph::pie->new(320, 300);

$grafico->set(
title => 'Visitas Mensuales de "Perl en Español"',
'3d' => 1,
) or warn $grafico->error;

my $imagen = $grafico->plot(\@graf) or die $grafico->error;

print "Content-type: image/png\n\n";
print $imagen->png;
exit(1);


Gráfica de Área

Ahora veamos como hacer un gráfico de área, este gráfico es como una linea que tiene un área por debajo(?), mejor veamos el ejemplo.

Como ya sabemos primero hay que editar la llamada al módulo:

use GD::Graph::area;

Ahora el constructor de nuestro gráfico va a ser de la siguiente manera:

my $grafico = GD::Graph::area->new(500, 300);

$grafico->set(
x_label => 'Mes',
y_label => 'Número de Visitas',
title => 'Visitas Mensuales de "Perl en Español"',
) or warn $grafico->error;

No tiene caso que explique todas las variables de nuevo pues son iguales a las del primer ejemplo.

Pueden ver aquí como quedaría este ejemplo.

Código Final


#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI ':standard';
use lib('./lib');
use GD::Graph::area;


my @campos = ('Oct 2003','Nov 2003','Dec 2003','Ene 2004','Feb 2004');
my @valores = ('547','2282','2798','2354','4326');
my @graf = (\@campos, \@valores);

my $grafico = GD::Graph::area->new(500, 300);

$grafico->set(
x_label => 'Mes',
y_label => 'Número de Visitas',
title => 'Visitas Mensuales de "Perl en Español"',
) or warn $grafico->error;

my $imagen = $grafico->plot(\@graf) or die $grafico->error;

print "Content-type: image/png\n\n";
print $imagen->png;
exit(1);


Desplegando el gráfico

Desplegar el gráfico en nuestra página de HTML es sumamente sencillo, sólo basta con incluir la siguiente linea tal y como lo harías con un gráfico:

<img src="http://perlenespanol.com/cgi-bin/pub/tutGD/area.cgi" alt="Visitas Mensuales">

Claro que debes de cambiar el URL a tu CGI.

Opciones Extra

Aparte de las propiedades que usamos anteriormente en las gráficas como "title","x_label","y_label", etc. Hay muchas propiedades más que podemos usar y aquí va una lista de algunas de ellas:

Para Gráficas de Barras
propiedadacción
bar_widthCambia el ancho de las barras al especificado en pixeles. Por default el módulo usa el mayor ancho posible considerando el ancho de el gráfico.
bar_spacingCambia la separación en píxeles de las barras. En algunos sistemas el valor de 1 será redondeado a 0. En caso de que se haya puesto un valor de bar_width este valor será ignorado y el bar_spacing será calculado automáticamente. El default es de 0.
Para Gráficas Circulares
propiedadacción
3dCuando se pone con un valor verdadero se hará un efecto 3d. El default es 1.
pie_heightEl grosor de la gráfica cuando esta el efecto 3d abilitado. El defaul es 0.1xAltura.
start_angleEl angulo donde la primera rebanada de datos inicializará. Por default esta 0.
suppress_angleSi el pedazo de datos es menor a esta cantidad de datos se eliminará y no se desplegará. El default es 0.
labelImprimer el mensaje abajo de el gráfico. El default es undef.

Todas estas propiedades se pueden incluir tal y como lo hice en los ejemplos con el "title","x_label","y_label", etc.

¿Problemas con tu instalación?

Si tienes problemas al instalar el módulo GD y GD::Graph, entra a la siguiente liga dentro del foro del sitio donde podrás encontrar una solución a tu problema:

http://perlenespanol.com/foro/viewtopic.php?t=284

¿Quiéres más tutoriales como este? Escribir tutoriales toma una gran cantidad de tiempo y esfuerzo. Si este tutorial te ayudó a aprender o a solucionar algo, por favor considera dejar alguna donación en apoyo a Perl en Español.

Cliquea en el botón de abajo para dejar tu donación por medio de PayPal.

Comparte:
Categorías de Tutoriales:
En Nuestros Foros:

    Software error:

    junk after document element at line 1, column 32, byte 32 at /usr/lib64/perl5/vendor_perl/XML/Parser.pm line 187.
    

    For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.

  • Entra a los foros »
Socializa:
Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Perl en Español es mantenido con Movable Type
Todo el contenido de Perl en Español está bajo una licencia CC:
Creative Commons License