Página 1 de 1

Uso de gráficos

NotaPublicado: 2006-07-24 14:41 @653
por purrutia
He leido los tutoriales sobre gráficos de la página y de CPAN (los de GDGraph) y no he encontrado lo que solucione mi problema. Deseo crear un gráfico donde los datos del eje X no se encuentren equiespaciados, sino que los datos correspondan a puntos reales, es decir que el eje X sea numérico. He probado colocando x_tick_number => 'auto'. Pero no es una muy buena solución. Existe algun módulo que permita hacer gráficos con el eje X numérico?

Gracias

NotaPublicado: 2006-07-24 16:22 @723
por explorer
¿A qué te refieres con lo que no es muy buena solución? ¿Has probado a darle a x_tick_number un número igual al de datos en el eje X?

NotaPublicado: 2006-07-24 16:37 @734
por explorer
Según he podido ver en el código, el truco está en la rutina create_x_labels.

Lo de la opción 'auto' no la he visto por ningún lado... Hay una serie de controles con respecto a x_tick_number, pero todos ellos requieren de alguna manera haber inicializado antes x_min_value y x_max_value, x_max y x_min. Y se debe cumplir las dos siguientes condiciones: el número de puntos ha de ser superior a dos y no ha de coincidir x_max con x_min.

¿Puedes poner un ejemplo de los datos que quieres usar?

NotaPublicado: 2006-07-25 19:39 @860
por purrutia
quise probar con datos como por ejemplo:

y1=534, x1=3
y2=2354,x2=5
y3=2876,x3=7
y4=2978,x4=32

en realidad el valor de los y no me importa mucho, pero me importa que se aprecie que los primeros datos estaban comprimidos en los primeros x, y que el último dato es mucho más lejano, pero ma aparecian todos equiespaciados, quizá no lo estoy haciendo bien, la verdad es que recién empecé a probar con los gráficos, y no he logrado solucionar esto.

Agradecere cualquier ayuda

Saludos

NotaPublicado: 2006-07-25 21:10 @923
por explorer
Mira esto:
Imagen

Lo he hecho con este código:
Código: Seleccionar todo
#!/usr/bin/perl
use GD::Graph::points;

@data = (
    [ 3, 5, 7, 32, ],
    [  534,  2354,  2876, 2978, ],
  );

my $graph = GD::Graph::points->new(400, 300);
$graph->set(
    x_label           => 'Valores X',
    y_label           => 'Valores Y',
    title             => 'Estadísticas',
    x_min_value       => 0,
    x_max_value       => 40,
    y_min_value       => 500,
    y_max_value       => 3000,
    x_tick_number     => 8,
    y_tick_number     => 8,
#   y_plot_values     => 0,
    x_label_skip      => 1,
    y_label_skip      => 1,
    show_values       => 1,
    box_axis          => 0,
    markers           => [4],
) or die $graph->error;

my $gd = $graph->plot(\@data) or die $graph->error;

open(IMG, '>file.png') or die $!;
binmode IMG;
print IMG $gd->png;

NotaPublicado: 2006-07-25 21:31 @938
por purrutia
Ah, si, queda muy bien...

Muchas gracias...

Por último, unas preguntas:

me puedes explicar que significan los parámetros _label_skip y tick_number... al parecer no entendí bien que significaban y ahi esta la clave de todo...


GRACIAS.....

NotaPublicado: 2006-07-25 21:42 @946
por explorer
Los label_skip quieren decir que cada cuantas etiquetas al lado de cada marca en los ejes debe pintarse. Si se pone a 1, quiere decir que tienen que pintar todos los valores.

Y tick_number, el número de marcas.

Lo que no he encontrado es la manera de pintar las marcas bajo exáctamente los valores, pero me parece que eso no es posible.

NotaPublicado: 2006-07-25 21:48 @950
por purrutia
MUCHAS GRACIAS........


Todo claro


Gracias de nuevo

NotaPublicado: 2006-07-25 22:20 @972
por explorer
Si ves que GD::Graph se te queda corto, miro esto:
http://search.cpan.org/src/CHARTGRP/Cha ... tation.pdf
página 37.

Es la documentación de Chart.
Otro módulo que considerar: Char::Plot, que sí permite personalizar la posición de los ticks.
Y también Image::Magick::Chart (quizás demasiados parámetros), Chart::Graph::Gnuplot (complicado de manejar) o Imager::Graph (le faltan cosas).

NotaPublicado: 2006-07-28 15:35 @691
por purrutia
WoW, te pasaste. Simpre me ha gustado programar, pero siempre encontraba la falencia que para poder hacer gráfico fácil tenia que guardar datos a un archivo y ocupar un programa como excel o matlab (u ocupar puramente matlab). Pero ahora que me diste estos datos, me pongo de cabeza a leer la documentación

Gracias de nuevo :)