Skip Menu |
 

This queue is for tickets about the Chart-Gnuplot CPAN distribution.

Report information
The Basics
Id: 94867
Status: open
Priority: 0/
Queue: Chart-Gnuplot

People
Owner: Nobody in particular
Requestors: ntvdm [...] hotmail.com
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: Can't plot multiple charts over multiple pages
Download (untitled) / with headers
text/plain 184b
There should be a way to use a multiplot()-like plot function (or multiplot itself) that does not issue "set multiplot" in order to be able to print several charts, one chart per page.
Subject: Re: [rt.cpan.org #94867] Can't plot multiple charts over multiple pages
Date: Mon, 21 Apr 2014 13:12:44 +0800
To: bug-Chart-Gnuplot [...] rt.cpan.org, ntvdm [...] hotmail.com
From: Ka-Wai Mak <kwmak [...] cpan.org>
Download (untitled) / with headers
text/plain 888b
Hi, Could you please show me an example of the output (one chart per page)? 2014-04-19 4:03 GMT+08:00 https://www.google.com/accounts/o8/id?id=AItOawlTGdLkGuFO1capRNVGwhAasU4qs_MxBvQvia RT <bug-Chart-Gnuplot@rt.cpan.org>: Show quoted text
> Fri Apr 18 16:03:11 2014: Request 94867 was acted upon. > Transaction: Ticket created by > https://www.google.com/accounts/o8/id?id=AItOawlTGdLkGuFO1capRNVGwhAasU4qs_MxBvQ > Queue: Chart-Gnuplot > Subject: Can't plot multiple charts over multiple pages > Broken in: (no value) > Severity: (no value) > Owner: Nobody > Requestors: ntvdm@hotmail.com > Status: new > Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=94867 > > > > There should be a way to use a multiplot()-like plot function (or > multiplot itself) that does not issue "set multiplot" in order to be able > to print several charts, one chart per page. >
Subject: RE: [rt.cpan.org #94867] Can't plot multiple charts over multiple pages
Date: Tue, 22 Apr 2014 10:07:14 -0400
To: Ka-Wai Mak <kwmak [...] cpan.org>, "bug-Chart-Gnuplot [...] rt.cpan.org" <bug-chart-gnuplot [...] rt.cpan.org>
From: Vlad ROMASCANU <ntvdm [...] hotmail.com>
Download (untitled) / with headers
text/plain 5.2k
Sorry, here's an example: use Chart::Gnuplot; my @charts; for my $metric ( qw(metric1 metric2 metric3 metric4 metric5 metric6 metric7 metric8 metric9) ) { my $chart = Chart::Gnuplot->new( title => $metric, xtics => { rotate => -90 }, ); my $data = Chart::Gnuplot::DataSet->new( xdata => [ 1..10 ], ydata => [ map { rand() } 1..10 ], style => 'linespoints', ); $chart->add2d($data); push @charts, $chart; } my $chart = Chart::Gnuplot->new( output => 'multiplot.pdf', terminal => 'pdfcairo', ); $chart->multiplot(@charts); The above will produce 9 plots overlapped on the same page of the PDF (same thing happens if the terminal is postscript). Adding the following workaround (hack) e.g. before the for loop: *Chart::Gnuplot::_setMultiplot = sub { 1 }; ...enables the above code to generate a 9-page PDF, one plot per page. :) Essentially the multiplot directive should not be issued unless $charts[0] is an array ref. Arguably `sub multiplot` could be made even more generic by iterating over @charts and checking whether each individual @chart item is an arrayref or not, to support a mix of multi-page and multi-plot-per-page, e.g. with the below patch: *** Chart/Gnuplot.pm.orig       2013-04-21 03:11:52.000000000 -0400 --- Chart/Gnuplot.pm    2014-04-22 09:58:21.325306500 -0400 *************** *** 149,165 ****               "center offset 0,-1\n";       } !     if (scalar(@charts) == 1 && ref($charts[0]) eq 'ARRAY')       { !         my $nrows = scalar(@{$charts[0]}); !         my $ncols = scalar(@{$charts[0][0]});           &_setMultiplot($self, $nrows, $ncols);           for (my $r = 0; $r < $nrows; $r++)           {               for (my $c = 0; $c < $ncols; $c++)               { !                 my $chart = $charts[0][$r][$c];                   $chart->_script($self->{_script});                   $chart->_multiplot(1);                   delete $chart->{bg}; --- 149,167 ----               "center offset 0,-1\n";       } !     foreach my $chart (@charts) !     { !         if (ref($chart) eq 'ARRAY')           { !             my $nrows = scalar(@$chart); !             my $ncols = scalar(@{$chart->[0]});               &_setMultiplot($self, $nrows, $ncols);               for (my $r = 0; $r < $nrows; $r++)               {                   for (my $c = 0; $c < $ncols; $c++)                   { !                     my $chart = $chart->[$r][$c];                       $chart->_script($self->{_script});                       $chart->_multiplot(1);                       delete $chart->{bg}; *************** *** 186,199 ****                   &_reset($chart);               }           }       }       else       { -         # Start multi-plot -         &_setMultiplot($self); - -         foreach my $chart (@charts) -         {               $chart->_script($self->{_script});               $chart->_multiplot(1);               delete $chart->{bg}; --- 188,197 ----                       &_reset($chart);                   }               } +             _unsetMultiplot($self);           }           else           {               $chart->_script($self->{_script});               $chart->_multiplot(1);               delete $chart->{bg}; *************** *** 939,944 **** --- 937,952 ----       print PLT "\n";       close(PLT);   } + + sub _unsetMultiplot + { +     my ($self) = @_; + +     open(PLT, ">>$self->{_script}") || confess("Can't write $self->{_script}"); +     print PLT "unset multiplot"; +     print PLT "\n"; +     close(PLT); + } ...then the following modification to the example code (*without* the _setMultiplot override hack) works as expected: $chart->multiplot(@charts[0..3], [ [@charts[0..2]], [@charts[3..5]], [@charts[6..8]] ], @charts[4..8]);3 ...and will produce a 10-page pdf, where pages 1-4 and 6-10 contain one chart per page, and where page 5 contains a 3x3 matrix of charts. Cheers, V. From: kwmak@cpan.org Date: Mon, 21 Apr 2014 13:12:44 +0800 Subject: Re: [rt.cpan.org #94867] Can't plot multiple charts over multiple pages To: bug-Chart-Gnuplot@rt.cpan.org; ntvdm@hotmail.com Hi, Could you please show me an example of the output (one chart per page)? 2014-04-19 4:03 GMT+08:00 https://www.google.com/accounts/o8/id?id=AItOawlTGdLkGuFO1capRNVGwhAasU4qs_MxBvQ via RT <bug-Chart-Gnuplot@rt.cpan.org>: Fri Apr 18 16:03:11 2014: Request 94867 was acted upon. Transaction: Ticket created by https://www.google.com/accounts/o8/id?id=AItOawlTGdLkGuFO1capRNVGwhAasU4qs_MxBvQ        Queue: Chart-Gnuplot      Subject: Can't plot multiple charts over multiple pages    Broken in: (no value)     Severity: (no value)        Owner: Nobody   Requestors: ntvdm@hotmail.com       Status: new  Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=94867> There should be a way to use a multiplot()-like plot function (or multiplot itself) that does not issue "set multiplot" in order to be able to print several charts, one chart per page.


This service is sponsored and maintained by Best Practical Solutions and runs on Perl.org infrastructure.

Please report any issues with rt.cpan.org to rt-cpan-admin@bestpractical.com.