Hi! I did what you told me, but I just gets this error msg in return when I am trying to execute the script: Invalid data set: 0 at ./test.pl line 105, <FILE> line 1.
This error is referring to this line in my script: my $gd = $graph->plot($ydata) or die $graph->error; I seems like there is something wrong with the content of the @ydata that causes this? And I also get this error msg even when I am not commenting out the settings around line 93 ? X alekto Den 9. apr. 2010 kl. 10.07 skrev Jins Thomas: > Hi alekto, > > Did u mean the script i copied previously didnt work? > > In the latest script you copied i made 2 changes to make it work > > Around line 59 > my @ydata = keys(%data); changed to > > my @ydata = values(%data); > > Unless you are not too much worried just leave the following things commented > (around line 93) > #y_max_value => 10, > #y_min_value => 0, > #x_max_value => $histmax, > #x_min_value => $histmin, > #y_tick_number => 10, > #x_tick_number => 16, > #y_label_skip => 2, > #x_label_skip => 1, > #x_tick_offset => 1 > > Let us know If with these changes it works. And if it works go to GD graphs > documentation and read each above keys means what and modify if something > wrong > > Cheers > Jins Thomas > > > On Fri, Apr 9, 2010 at 1:02 PM, alekto <[email protected]> wrote: > Hi again, > thank you for trying to help! > I have been looking at the script once again, I could not really get your > suggestion to work, but I have been doing some new changes thought. > With this script I am pasting her, I manage to print the graph to a .png > file, but the histogram does not show. The x and y axes should be correct, > but there is some thing wrong whit the $xydata I think, I have also been > trying to only print the @ydata but the histograms will not show. > > Any suggestions? > > #!/usr/bin/perl > > # Needed pkg > use Getopt::Std; > use strict; > use warnings; > use GD::Graph::bars; > > # Global variables > my $VERBOSE = 0; > my $DEBUG = 0; > > ################################################################ > # handle flags and > # Example: c == "-c", c: == "-c argument" > my $opt_string = 'hvdf:'; > getopts( "$opt_string", \my %opt ) or usage() and exit 1; # exit other than 0 > = error!! > > # print help message if -h is invoked > if ( $opt{'h'} ){ > usage(); > exit 0; > } > > $VERBOSE = 1 if $opt{'v'}; > $DEBUG = 1 if $opt{'d'}; > my $FILENAME = $opt{'f'}; > > # main program content > > my $filename = $FILENAME; > my $line; > my @dataarray; > my @array; > my $counter; > my $histmin; > my $histmax; > > > open (FILE, "$filename") or die ("ERROR: $!\n"); > > while ($line = <FILE>){ > debug($line); > chomp $line; > @array = split / /, $line; > @array = sort @array; > $histmin = $array[0]; > $histmax = $array[-1]; > $counter++; > } > > my %data; > foreach my $tmp (@array) { > $data{$tmp}+=1; > } > > my @xdata = keys(%data); > my @ydata = keys(%data); > my @xydata=(\...@xdata, \...@ydata); > > > > printHistogram(\...@xydata,"$filename",$histmin,$histmax,"Title"); > > > ########################################## > # Helper routines > > sub usage { > # print the correct use of this script > print "Usage:\n"; > print "-h Usage\n"; > print "-v Verbose\n"; > print "-d Debug\n"; > print "-f Filename\n"; > } > > sub verbose { > print $_[0] if ( $VERBOSE or $DEBUG ); > } > > sub debug { > print $_[0] if ( $DEBUG ); > } > > sub printHistogram { > my ($xydata,$filename,$histmin,$histmax,$title) = @_; > my $graph = GD::Graph::bars->new(600, 300); > > $graph->set( > y_label => 'Frequency', > title => $title, > y_max_value => 10, > y_min_value => 0, > x_max_value => $histmax, > x_min_value => $histmin, > y_tick_number => 10, > x_tick_number => 16, > y_label_skip => 2, > x_label_skip => 1, > x_tick_offset => 1 > ) or die $graph->error; > > $graph->set_legend('Frequency'); > my $gd = $graph->plot($xydata) or die $graph->error; > > open(IMG, ">$filename.png") or die $!; > binmode IMG; > print IMG $gd->png; > close IMG; > > } > > > Den 7. apr. 2010 kl. 15.05 skrev Jins Thomas: > >> Hi alekto, >> >> If this is the case, you should sort help of hash in perl imho,may be others >> can suggest some other ways as well.. >> >> See the %data and population of @xydata below. And supply the @xydata to >> plot() . Did u get me. So finally a working code will look some thing like >> this... See the ##Modified begin/end## comment to separate out the changes. >> >> Others please suggest if someother better way :) >> >> >> # Needed pkg >> use Getopt::Std; >> use strict; >> use warnings; >> use GD::Graph::bars; >> >> # Global variables >> my $VERBOSE = 0; >> my $DEBUG = 0; >> >> ################################################################ >> # handle flags and >> # Example: c == "-c", c: == "-c argument" >> my $opt_string = 'hvdf:'; >> getopts( "$opt_string", \my %opt ) or usage() and exit 1; # exit other than >> 0 = error!! >> >> # print help message if -h is invoked >> if ( $opt{'h'} ){ >> usage(); >> exit 0; >> } >> >> $VERBOSE = 1 if $opt{'v'}; >> $DEBUG = 1 if $opt{'d'}; >> my $FILENAME = $opt{'f'}; >> >> # main program content >> >> my $filename = $FILENAME; >> my $line; >> my @dataarray; >> my @array; >> my $counter; >> my $histmin; >> my $histmax; >> >> open (FILE, "$filename") or die ("ERROR: $!\n"); >> >> while ($line = <FILE>){ >> debug($line); >> chomp $line; >> @array = split / /, $line; >> @array = sort @array; >> $histmin = $array[0]; >> $histmax = $array[-1]; >> $counter++; >> } >> #######Modified begin ######################### >> my %data; >> foreach my $tmp (@array) { >> $data{$tmp}+=1; >> } >> my @xdata = keys(%data); >> my @ydata = values(%data); >> my @xydata=(\...@xdata, \...@ydata); >> #######Modified end######################### >> # print "$histmin\n$histmax\n"; >> # print "min: $array[0]\nmax: $array[-1]\n"; >> # print "@dataarray\n"; >> #######Modified begin ######################### >> printHistogram(\...@xydata,$filename,$histmin,$histmax,'Age'); >> #######Modified end ######################### >> >> >> ########################################## >> # Helper routines >> >> sub usage { >> # print the correct use of this script >> print "Usage:\n"; >> print "-h Usage\n"; >> print "-v Verbose\n"; >> print "-d Debug\n"; >> print "-f Filename\n"; >> } >> >> sub verbose { >> print $_[0] if ( $VERBOSE or $DEBUG ); >> } >> >> sub debug { >> print $_[0] if ( $DEBUG ); >> } >> >> sub printHistogram { >> #######Modified begin######################### >> my ($xydata,$filename,$histmin,$histmax,$title) = @_; >> #######Modified end ######################### >> my $graph = GD::Graph::bars->new(400, 300); >> >> $graph->set( >> x_label => 'X Label', >> y_label => 'Y label', >> title => '$title', >> y_max_value => $histmax, >> y_min_value => $histmin, >> y_tick_number => 8, >> y_label_skip => 2 >> ) or die $graph->error; >> #######Modified begin ######################### >> my $gd = $graph->plot($xydata) or die $graph->error; >> #######Modified end ######################### >> >> open(IMG, ">$filename.png") or die $!; >> binmode IMG; >> print IMG $gd->png; >> close IMG; >> } >> >> On Wed, Apr 7, 2010 at 6:03 PM, alekto <[email protected]> wrote: >> Hi, Thanks for helping! >> The ting is that my age file only contain age values like this: 22 22 23 24 >> 26 26 26 26 28 28 30 30, and I have no input for a second array! >> I want these age values to be the bars(x-values), and a want the number of >> times each of these are represented, to be the y-values. >> Could this be done with the script I am working on, or must I do some >> changes in order to make this work? >> >> X Alekto >> >> >> >> Den 7. apr. 2010 kl. 11.44 skrev Jins Thomas: >> >>> Hi Alekto, >>> >>> How your file content looks like? Please paste few lines from your input >>> file age. >>> >>> Are you supplying X axis and Y axis values properly, basically you should >>> supply two arrays, one for X axis and and one for Y axis. >>> >>> See the example in >>> >>> http://gdgraph.com/samples/sample11.html >>> >>> >>> Cheers >>> Jins >>> >>> >>> >>> On Wed, Apr 7, 2010 at 12:34 PM, alekto <[email protected]> wrote: >>> Hi guys! >>> Tnx for answering! Of course it was the /misplacing of the \ that caused my >>> error;) >>> But after changing this error I still get an other error msg like this: >>> >>> Invalid data set: 1 at ./bars.pl line 90, <FILE> line 1. >>> >>> which is referring to this line in my script: >>> >>> my $gd = $graph->plot(\...@array) or die $graph->error; >>> >>> I'm not sure what this error means?? >>> >>> Xalekto >>> >>> >>> >>> Den 7. apr. 2010 kl. 07.23 skrev Jins Thomas: >>> >>> > Hi alekto, >>> > >>> > My guess >>> > >>> > Main error is due to >>> > my $gd = $graph->plot(/@array) (Line 90) Did u meant \ (bless operator) >>> > instead of / . Same is being repeated in printHistogram(/@array >>> > >>> > Also hope last } was for printHistogram subroutine was copy paste problem >>> > while emailing. Other than that this looks fine. >>> > >>> > Let me know you require some further help on this. >>> > >>> > >>> > Cheers >>> > Jins Thomas >>> > >>> > >>> > >>> > On Wed, Apr 7, 2010 at 9:20 AM, alekto <[email protected]> >>> > wrote: >>> > Hi, >>> > I got this scrip that is suppsed to use the use the Getopt::Std; and >>> > GD::Graph::bars; to input generate an array from a file (age). >>> > With this array, the GD::Graph::bars is going to create a subroutine >>> > printHistogram() which generates a png file based on a supplied array. >>> > The signature of the method could be like this: >>> > printHistogram(\...@histy,"$filename",$histmin,$histmax,"Title"); >>> > >>> > I manage to generate the array from the input file, but it seems like >>> > there is something wrong with my subroutine at the end, I have been using >>> > the examples at cpan.org as an templat for this subroutine. >>> > Following is the error msg, as well as the complete script. >>> > Tnx! >>> > >>> > >>> > The ERROR msg: >>> > >>> > hostname$ ./bars.pl -f age >>> > ./bars.pl: line 5: use: command not found >>> > Array found where operator expected at ./bars.pl line 90, at end of line >>> > (Might be a runaway multi-line // string starting on line 53) >>> > (Missing operator before ?) >>> > Global symbol "$title" requires explicit package name at ./bars.pl line >>> > 53. >>> > Global symbol "$graph" requires explicit package name at ./bars.pl line >>> > 53. >>> > Global symbol "$graph" requires explicit package name at ./bars.pl line >>> > 53. >>> > Global symbol "$title" requires explicit package name at ./bars.pl line >>> > 53. >>> > Global symbol "$graph" requires explicit package name at ./bars.pl line >>> > 53. >>> > Global symbol "$gd" requires explicit package name at ./bars.pl line 53. >>> > Global symbol "$graph" requires explicit package name at ./bars.pl line >>> > 53. >>> > syntax error at ./bars.pl line 90, near "my $gd = $graph->plot(/@array" >>> > Global symbol "$graph" requires explicit package name at ./bars.pl line >>> > 90. >>> > Global symbol "$gd" requires explicit package name at ./bars.pl line 95. >>> > Unmatched right curly bracket at ./bars.pl line 97, at end of line >>> > ./bars.pl has too many errors.' >>> > >>> > >>> > >>> > #!/usr/bin/perl -w >>> > >>> > # Needed pkg >>> > use Getopt::Std; >>> > use strict; >>> > use warnings; >>> > use GD::Graph::bars; >>> > >>> > # Global variables >>> > my $VERBOSE = 0; >>> > my $DEBUG = 0; >>> > >>> > ################################################################ >>> > # handle flags and >>> > # Example: c == "-c", c: == "-c argument" >>> > my $opt_string = 'hvdf:'; >>> > getopts( "$opt_string", \my %opt ) or usage() and exit 1; # exit other >>> > than 0 = error!! >>> > >>> > # print help message if -h is invoked >>> > if ( $opt{'h'} ){ >>> > usage(); >>> > exit 0; >>> > } >>> > >>> > $VERBOSE = 1 if $opt{'v'}; >>> > $DEBUG = 1 if $opt{'d'}; >>> > my $FILENAME = $opt{'f'}; >>> > >>> > # main program content >>> > >>> > my $filename = $FILENAME; >>> > my $line; >>> > my @dataarray; >>> > my @array; >>> > my $counter; >>> > my $histmin; >>> > my $histmax; >>> > >>> > open (FILE, "$filename") or die ("ERROR: $!\n"); >>> > >>> > while ($line = <FILE>){ >>> > debug($line); >>> > chomp $line; >>> > @array = split / /, $line; >>> > @array = sort @array; >>> > $histmin = $array[0]; >>> > $histmax = $array[-1]; >>> > $counter++; >>> > } >>> > # print "$histmin\n$histmax\n"; >>> > # print "min: $array[0]\nmax: $array[-1]\n"; >>> > # print "@dataarray\n"; >>> > printHistogram(/@array,$filename,$histmin,$histmax,'Age'); >>> > >>> > >>> > ########################################## >>> > # Helper routines >>> > >>> > sub usage { >>> > # print the correct use of this script >>> > print "Usage:\n"; >>> > print "-h Usage\n"; >>> > print "-v Verbose\n"; >>> > print "-d Debug\n"; >>> > print "-f Filename\n"; >>> > } >>> > >>> > sub verbose { >>> > print $_[0] if ( $VERBOSE or $DEBUG ); >>> > } >>> > >>> > sub debug { >>> > print $_[0] if ( $DEBUG ); >>> > } >>> > >>> > sub printHistogram { >>> > my (@array,$filename,$histmin,$histmax,$title) = @_; >>> > my $graph = GD::Graph::bars->new(400, 300); >>> > >>> > $graph->set( >>> > x_label => 'X Label', >>> > y_label => 'Y label', >>> > title => '$title', >>> > y_max_value => $histmax, >>> > y_min_value => $histmin, >>> > y_tick_number => 8, >>> > y_label_skip => 2 >>> > ) or die $graph->error; >>> > >>> > my $gd = $graph->plot(/@array) or die $graph->error; >>> > >>> > >>> > open(IMG, '>$filename.png') or die $!; >>> > binmode IMG; >>> > print IMG $gd->png; >>> > close IMG; >>> > >>> > >>> > -- >>> > To unsubscribe, e-mail: [email protected] >>> > For additional commands, e-mail: [email protected] >>> > http://learn.perl.org/ >>> > >>> > >>> > >>> >>> >> >> > >
