From 5db86810b50ac52b4066e44120f4d1f541d9f8b8 Mon Sep 17 00:00:00 2001 From: Dima Kogan Date: Thu, 6 Feb 2014 23:07:39 -0800 Subject: [PATCH 1/3] the rangesizes are now precomputed and easily assessed --- bin/feedgnuplot | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/bin/feedgnuplot b/bin/feedgnuplot index ea36bf9..d77d84f 100755 --- a/bin/feedgnuplot +++ b/bin/feedgnuplot @@ -202,6 +202,23 @@ sub interpretCommandline exit -1; } + + # I now set up the rangesize to always be + # $options{rangesize_hash}{$id} // $options{rangesize_default} + if ( $options{rangesizeall} ) + { + $options{rangesize_default} = $options{rangesizeall}; + } + else + { + $options{rangesize_default} = 1; + + $options{rangesize_default} += $options{extraValuesPerPoint} if ($options{extraValuesPerPoint}); + $options{rangesize_default}++ if ($options{colormap}); + $options{rangesize_default}++ if ($options{circles} ); + } + + # parse stream option. Allowed only numbers >= 0 or 'trigger'. After this code # $options{stream} is # -1 for triggered replotting @@ -434,19 +451,6 @@ sub makeDomainNumeric sub mainThread { - my $valuesPerPoint; - if( $options{rangesizeall} ) - { - $valuesPerPoint = $options{rangesizeall}; - } - else - { - $valuesPerPoint = 1; - if($options{extraValuesPerPoint}) { $valuesPerPoint += $options{extraValuesPerPoint}; } - if($options{colormap}) { $valuesPerPoint++; } - if($options{circles} ) { $valuesPerPoint++; } - } - local *PIPE; my $dopersist = ''; @@ -720,8 +724,6 @@ sub mainThread while(@fields) { - my $rangesize = $valuesPerPoint; - if($options{dataid}) { $id = shift @fields; @@ -731,10 +733,10 @@ sub mainThread $id++; } - if( $options{rangesize_hash}{$id} ) - { - $rangesize = $options{rangesize_hash}{$id}; - } + # I'd like to use //, but I guess some people are still on perl 5.8 + my $rangesize = exists $options{rangesize_hash}{$id} ? + $options{rangesize_hash}{$id} : + $options{rangesize_default}; last if @fields < $rangesize; From a65abc6095e80fed103d6f4e94dc51285c1597ed Mon Sep 17 00:00:00 2001 From: Dima Kogan Date: Thu, 6 Feb 2014 23:16:11 -0800 Subject: [PATCH 2/3] fixed incorrect plotting of --timefmt --rangesize plots --- bin/feedgnuplot | 14 +++++++++++++- t/plots.t | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/bin/feedgnuplot b/bin/feedgnuplot index d77d84f..636bc19 100755 --- a/bin/feedgnuplot +++ b/bin/feedgnuplot @@ -867,7 +867,19 @@ sub updateCurveOptions my $usingoptions = ''; if( $options{timefmt} ) { - $usingoptions = "using 1:" . ($options{timefmt_Ncols}+1); + # with --timefmt I need an explicit 'using' specification. I specify the + # columns as 1:2:3..... I need the right number of columns (this is given + # as 1 + rangesize). I also need to start the range at the first column + # past the timefmt + + # I'd like to use //, but I guess some people are still on perl 5.8 + my $rangesize = exists $options{rangesize_hash}{$id} ? + $options{rangesize_hash}{$id} : + $options{rangesize_default}; + + my @rest = map {$_ + $options{timefmt_Ncols}} (1..$rangesize); + + $usingoptions = "using 1:" . join(':', @rest); } $curve->{options} = "$histoptions $usingoptions $titleoption $curve->{extraoptions} $curvestyleall"; diff --git a/t/plots.t b/t/plots.t index 821d9e5..43ef00f 100644 --- a/t/plots.t +++ b/t/plots.t @@ -39,7 +39,7 @@ BEGIN { } } -use Test::More tests => 56; +use Test::More tests => 58; use File::Temp 'tempfile'; use IPC::Run 'run'; use String::ShellQuote; @@ -801,6 +801,53 @@ tryplot( testname => '--timefmt plot with --monotonic', EOF +tryplot( testname => '--timefmt with custom rangesize', + cmd => q{seq 5 | gawk '{print strftime("%d %b %Y %T",1382249107+$1,1),$1,$1/10}'}, + options => ['--domain', '--timefmt', '%d %b %Y %H:%M:%S', + qw(--with errorbars --rangesizeall 2)], + refplot => <<'EOF' ); + + + 5.5 ++---------+-----------+----------+----------+----------+-----------+----------+---------** + + + + + + + + + * + | * + 5 ++ +A + | * + | * + | * + 4.5 ++ ** + | *** | + | * | + 4 ++ A ++ + | * | + | * | + | *** | + 3.5 ++ ++ + | *** | + | * | + 3 ++ A ++ + | * | + | * | + | *** | + 2.5 ++ ++ + | | + | *** | + 2 ++ A ++ + | * | + | *** | + | | + 1.5 ++ ++ + | | + | | + 1 A* ++ + ** | + | | + + + + + + + + + + + 0.5 ++---------+-----------+----------+----------+----------+-----------+----------+---------++ + 05:08 05:08 05:09 05:09 05:10 05:10 05:11 05:11 05:12 + +EOF + tryplot( testname => 'Error bars (using extraValuesPerPoint)', cmd => q{seq 5 | gawk '{print $1,$1,$1/10}'}, options => [qw(--domain), From 9b3cbc13be06471f372560c17a48bfc37a1a82d6 Mon Sep 17 00:00:00 2001 From: Dima Kogan Date: Thu, 6 Feb 2014 23:17:29 -0800 Subject: [PATCH 3/3] version bump --- Changes | 6 ++++++ bin/feedgnuplot | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Changes b/Changes index 63fb7f1..d998182 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,9 @@ +feedgnuplot (1.33) + + * fixed incorrect plotting of --timefmt --rangesize plots + + -- Dima Kogan Thu, 06 Feb 2014 23:17:21 -0800 + feedgnuplot (1.32) * Added --rangesize and --rangesizeall. Different curves can now plot diff --git a/bin/feedgnuplot b/bin/feedgnuplot index 636bc19..e1e6d10 100755 --- a/bin/feedgnuplot +++ b/bin/feedgnuplot @@ -13,7 +13,7 @@ use Thread::Queue; use Pod::Usage; use Time::Piece; -my $VERSION = 1.32; +my $VERSION = 1.33; my %options; interpretCommandline();