diff --git a/TimeSeries.pm b/TimeSeries.pm index aae2e35..c217d80 100644 --- a/TimeSeries.pm +++ b/TimeSeries.pm @@ -12,6 +12,7 @@ sub new { $self->{data} = []; $self->{style} = "lines"; + $self->{output_format} = "png"; return $self; } @@ -39,6 +40,27 @@ sub style { return $oldstyle; } +sub log_x { + my ($self, $log_x) = @_; + my $oldlog_x = $self->{log_x}; + $self->{log_x} = $log_x if ($log_x); + return $oldlog_x; +} + +sub log_y { + my ($self, $log_y) = @_; + my $oldlog_y = $self->{log_y}; + $self->{log_y} = $log_y if ($log_y); + return $oldlog_y; +} + +sub output_format { + my ($self, $output_format) = @_; + my $oldoutput_format = $self->{output_format}; + $self->{output_format} = $output_format if ($output_format); + return $oldoutput_format; +} + sub dstcorr { @@ -86,6 +108,8 @@ sub plot { print $ctlfh "set output '$psfn'\n"; print $ctlfh "set data style $self->{style}\n"; print $ctlfh "set grid\n"; + print $ctlfh "set log x\n" if ($self->{log_x}); + print $ctlfh "set log y\n" if ($self->{log_y}); # compute ticks @@ -203,19 +227,36 @@ sub plot { my $rc = system("gnuplot", $ctlfn); - print STDERR "system returned $rc\n"; + #print STDERR "system returned $rc\n"; - open(PNG, "gs -sDEVICE=ppmraw -r150 -dBATCH -sOutputFile=- -q - < $psfn |" . - "pnmscale 0.5 |" . - "pnmflip -cw |" . - "pnmcrop |" . - "ppmquant 256 |" . - "ppmtogif |"); + my $pipe; - my $png; - { local $/ = undef; $png = ; } + if ($self->{output_format} eq "ps") { + $pipe = "< $psfn"; + } else { + $pipe = + "gs -sDEVICE=ppmraw -r150 -dBATCH -sOutputFile=- -q - < $psfn |" . + "pnmscale 0.5 |" . + "pnmflip -cw |" . + "pnmcrop 2> /dev/null |"; + } + + if ($self->{output_format} eq "png") { + $pipe .= "pnmtopng |"; + } + if ($self->{output_format} eq "gif") { + $pipe .= "ppmquant 256 2> /dev/null |" . + "ppmtogif |"; + } + if ($self->{output_format} eq "jpeg") { + $pipe .= "cjpeg -sample 1x1,1x1,1x1 |"; + } + open(PNG, $pipe); + + my $graph; + { local $/ = undef; $graph = ; } close(PNG); - return $png; + return $graph; } 1; diff --git a/t/0basic.t b/t/0basic.t new file mode 100644 index 0000000..b907016 --- /dev/null +++ b/t/0basic.t @@ -0,0 +1,73 @@ +# Before `make install' is performed this script should be runnable with +# `make test'. After `make install' it should work as `perl test.pl' + +######################### We start with some black magic to print on failure. + +# Change 1..1 below to 1..last_test_to_print . +# (It may become useful if the test is moved to ./t subdirectory.) + +BEGIN { $| = 1; print "1..6\n"; } +END {print "not ok 1\n" unless $loaded;} +use TimeSeries; +$loaded = 1; +print "ok 1\n"; + +######################### End of black magic. + +# Insert your test code below (better if it prints "ok 13" +# (correspondingly "not ok 13") depending on the success of chunk 13 +# of the test code): + +my $test; +$test = 2; +my $ts = TimeSeries->new(); +if (defined($ts)) { + print "ok $test\n"; +} else { + print "not ok $test\n"; +} + +$ts->legend("value"); +$ts->add(1.000E9, 5); +$ts->add(1.001E9, 9); +$ts->add(1.002E9, 3); + +$test = 3; +my $g = $ts->plot(); +print STDERR "length \$g = ", length($g), "\n"; +if (length($g) > 0 && substr($g, 0, 3) eq "PNG") { + print "ok $test\n"; +} else { + print "not ok $test\n"; +} + +$test = 4; +$ts->output_format("gif"); +my $g = $ts->plot(); +print STDERR "length \$g = ", length($g), "\n"; +if (length($g) > 0 && substr($g, 0, 6) eq "GIF87a") { + print "ok $test\n"; +} else { + print "not ok $test\n"; +} + +$test = 5; +$ts->output_format("jpeg"); +my $g = $ts->plot(); +print STDERR "length \$g = ", length($g), "\n"; +if (length($g) > 0 && substr($g, 0, 10) eq "\377\330\377\340\000\020JFIF") { + print "ok $test\n"; +} else { + print "not ok $test\n"; +} + +$test = 6; +$ts->output_format("ps"); +my $g = $ts->plot(); +print STDERR "length \$g = ", length($g), "\n"; +if (length($g) > 0 && substr($g, 0, 2) eq "%!") { + print "ok $test\n"; +} else { + print "not ok $test\n"; +} +