> Hola Lista.
>
> Sabeis si se puede y como se hace para que el MRTG pueda realizar una
> gr�fica a partir de un txt separado por comas y/o espacios?

MRTG est� hecho para samplear datos recibiendo cada vez un valor alto y un
valor bajo. Si puedes alimentarle estos datos en ese formato (p.ej. a
trav�s de un programita simpl�n en Perl), quedas listo.

Ahora, tal vez te convendr�a directamente desde Perl (o tu lenguaje
favorito) crear la gr�fica. Es muy simple - Te pongo por ejemplo el c�digo
que gener� estas gr�ficas:

http://tlali.iztacala.unam.mx/elec/distrib/

Lo hice con GD (y obviamente, en Perl), y fue mayormente para aprender a
usar GD, as� que... Tal vez haya c�digo feo y muy mejorable por todos
lados ;-)

=======================================================
sub grafBarras {
    # Recibe dos par�metros - el primero es una referencia a un arreglo, el
    # segundo es una referencia a un hash. Crea una gr�fica de barras en la
    # que el arreglo queda como eje X. Cada columna va referida a uno de
    # estos valores.
    # Regresa el PNG generado por la informaci�n recibida.
    my ($img, $col, $colBarras, $elec, $dist, $max, $x, $y, $tot);

    $dist->{'columnas'} = shift;
    $dist->{'cant'} = shift;
    $x = shift;
    $y = shift;
    $img = new GD::Image($x,$y);
    $col = {'blanco' => $img->colorAllocate(255,255,255),
            'negro' => $img->colorAllocate(0,0,0),
            'gris' => $img->colorAllocate(180,180,180),
            'azul_univ' => $img->colorAllocate(5,42,92),
            'amarillo_oro' => $img->colorAllocate(238,180,2),
            'terracota' => $img->colorAllocate(90,2,2),
            'verde' => $img->colorAllocate(2,98,14),
            'cobre' => $img->colorAllocate(197,82,5) };
    $colBarras = [qw(azul_univ amarillo_oro terracota verde cobre)];
    $img->rectangle(0,0,$x-1,$y-1,$col->{'negro'});
    $tot = 0;
    map {$tot += $dist->{'cant'}{$dist->{'columnas'}[$_]}} 
(@{$dist->{'columnas'}});

    return $img->png unless scalar @{$dist->{'columnas'}};
    $dist->{'dim'} = [ $x*.05, # Valor m�nimo horizontal
                       $x*.95, # Valor m�ximo horizontal
                       $y*.05, # Valor m�nimo vertical
                       $y*.76, # Valor m�ximo vertical, primer rengl�n de 
etiquetas
                       $y*.84, # Segundo rengl�n de etiquetas
                       $y*.88, # tercer rengl�n de etiquetas
                       ($x*0.9)/(scalar @{$dist->{'columnas'}}), # Espacio 
entre columnas
                       $x/(@{$dist->{'columnas'}}*3) # Ancho de cada columna
                       ];

    foreach my $lin (0..6) {
        # L�neas gu�a de fondo
        my $xpos = ($dist->{'dim'}[1]-$dist->{'dim'}[0]) * ($lin/6) + 
$dist->{'dim'}[0];
        my $ypos = ($dist->{'dim'}[3]-$dist->{'dim'}[2]) * ($lin/6) + 
$dist->{'dim'}[2];
        
$img->line($dist->{'dim'}[0],$ypos,$dist->{'dim'}[1],$ypos,$col->{'gris'});
        
$img->line($xpos,$dist->{'dim'}[2],$xpos,$dist->{'dim'}[3],$col->{'gris'});
    }

    $max=0;
    foreach (values %{$dist->{'cant'}}) {
        $max = $_ if $max < $_;
    }

    foreach my $colum (0..$#{$dist->{'columnas'}}) {
        # Cada una de las barras, as� como los n�meros que las describen
        my ($posX, $vot, $altura, $altMax);
        $posX = $dist->{'dim'}[0] + ($colum+.5) * $dist->{'dim'}[6];
        $vot = $dist->{'cant'}{$dist->{'columnas'}[$colum]};
        $altMax = $dist->{'dim'}[3] - $dist->{'dim'}[2];
        $altura = $dist->{'dim'}[2] + $altMax - ($max ? $vot/$max : 0) * 
$altMax;


        $img->string(GD::Font->Small, $posX, $dist->{'dim'}[3], $vot, 
$col->{$colBarras->[$colum % @$colBarras]});
        $img->string(GD::Font->Tiny, $posX, $dist->{'dim'}[4], 
sprintf('%d%%',($vot*100)/$tot), $col->{$colBarras->[$colum % @$colBarras]});
        $img->string(GD::Font->Small, $posX, $dist->{'dim'}[5], 
$dist->{'columnas'}[$colum], $col->{'negro'});

        $img->filledRectangle($posX-($dist->{'dim'}[7]/2), $altura, 
$posX+($dist->{'dim'}[7]/2), $dist->{'dim'}[3], $col->{$colBarras->[$colum % 
@$colBarras]});
    }

    return $img->png;
}

=======================================================

-- 
Gunnar Wolf - [EMAIL PROTECTED] - (+52-55)5623-1118
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF

Responder a