Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I'm reading in a file and then breaking it down into sections (looping through) and then trying to graph each section. The graph for the first time through works fine but any additional iteration is keeping the data values from the initial dataset. I don't believe there's an error in my code as I'm able to print each (successive) dataset. Now, per GD::Graph documentation there's a know bug: GD::Graph objects cannot be reused. To create a new plot, you have to create a new GD::Graph object." However, "my $graph= GD::Graph::linespoints->new(900,500);" is not creating a new object (other than the initial object). I have also set $graph to "undef", with no remedy. Can one chart multiple datasets (successively) using GD::GRAPH or would an individual program need to be run for each dataset? I've found the same problem on a few other sites but it has never been addressed. thanks

Replies are listed 'Best First'.
Re: GD::GRAPH:linespoints problem
by Joost (Canon) on Mar 02, 2007 at 23:55 UTC
    Can you give a short example of this bug, say in 5 - 20 lines of code? Without that it's hard to find what the cause is.

    Update: here's a simple example that fails to show your bug:

    use strict; use warnings; use GD::Graph::linespoints; for (1 .. 2) { my $g = GD::Graph::linespoints->new(100,100); $g->set( x_label => 'X Label', y_label => 'Y label', title => 'Some simple graph', y_max_value => 8, y_tick_number => 8, y_label_skip => 2 ) or die $g->error; open F,">plot$_.png" or die $!; binmode F; my $img = $g->plot( [[ 1, 2, 3, 4], [ 1 * $_, 2 * $_, 3 * $_, 4 * $_ ]] ) or die $g->error; print F $img->png; }
      Think of an array of data, that's updated with each iteration. The initial dataset is plotted. The program moves to the second dataset; all the values are updated EXCEPT for the graph portion, which retains the values from the initial dataset --- Thus, the initial dataset is repeatedly plotted Once again, I am able to print iterated datasets thanks
      It would take me a while to reproduce so could you please revise your code where you read in data from a file, then iterate through that data, charting 2 successive instances of it trying to come up with an example now but it's not progressing as quickly as I'd want thanks
        use strict; use warnings; use GD::Graph::linespoints; my $i = 0; while (<>) { my $g = GD::Graph::linespoints->new(100,100); $g->set( x_label => 'X Label', y_label => 'Y label', title => 'Some simple graph', y_max_value => 8, y_tick_number => 8, y_label_skip => 2 ) or die $g->error; my @line = split / /; open F,">plot$i.png" or die $!; binmode F; my $img = $g->plot( [[ 1, 2, 3, 4], \@line] ) or die $g->error; print F $img->png; $i++ }
        Not that it makes any difference; as I suggested before the bug is in YOUR code, not in whatever I make up.