mirror of
https://github.com/dkogan/feedgnuplot.git
synced 2025-09-19 03:38:08 +08:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
40fea5eb7f | ||
![]() |
016c7ebfa9 | ||
![]() |
350b2db022 | ||
![]() |
ba0f2eee08 | ||
![]() |
9237811ed0 | ||
![]() |
69285d7df1 | ||
![]() |
aedbc28afe | ||
![]() |
e865871492 | ||
![]() |
0f85110a38 | ||
![]() |
5cf4acca62 |
24
Changes
24
Changes
@@ -1,3 +1,27 @@
|
||||
feedgnuplot (1.51)
|
||||
|
||||
* Added .gp "terminal" to create self-plotting gnuplot files
|
||||
|
||||
-- Dima Kogan <dima@secretsauce.net> Sat, 29 Sep 2018 10:56:30 -0700
|
||||
|
||||
feedgnuplot (1.50)
|
||||
|
||||
* Script waits for the plot window to close before exiting
|
||||
Instead of sleeping forever. This is really nice! I no longer need
|
||||
to quit the plot window AND then C-c. Quitting the plot window is
|
||||
now sufficient
|
||||
* by default --image sets range noextend
|
||||
* tab-completion knows about the fnormal distribution
|
||||
|
||||
-- Dima Kogan <dkogan@debian.org> Fri, 24 Aug 2018 13:11:05 -0700
|
||||
|
||||
feedgnuplot (1.49)
|
||||
|
||||
* --vnl now works with plots that have rangesize > 1
|
||||
* zsh completion: --xlen argument isn't optional
|
||||
|
||||
-- Dima Kogan <dima@secretsauce.net> Fri, 16 Mar 2018 13:52:28 -0700
|
||||
|
||||
feedgnuplot (1.48)
|
||||
|
||||
* --vnlog works properly with --domain
|
||||
|
171
bin/feedgnuplot
171
bin/feedgnuplot
@@ -16,7 +16,7 @@ use Pod::Usage;
|
||||
use Time::Piece;
|
||||
|
||||
# Makefile.PL assumes this is in ''
|
||||
my $VERSION = '1.48';
|
||||
my $VERSION = '1.51';
|
||||
|
||||
my %options;
|
||||
interpretCommandline();
|
||||
@@ -465,10 +465,13 @@ sub interpretCommandline
|
||||
{
|
||||
# images generally have the origin at the top-left instead of the
|
||||
# bottom-left, so given nothing else, I flip the y axis
|
||||
if( !defined $options{ymin} && !defined $options{ymax} &&
|
||||
if( !defined $options{xmin} && !defined $options{xmax} &&
|
||||
!defined $options{ymin} && !defined $options{ymax} &&
|
||||
! any { /^ *xrange\b/ } @{$options{set}} &&
|
||||
! any { /^ *yrange\b/ } @{$options{set}} )
|
||||
{
|
||||
push @{$options{set}}, "yrange [:] reverse";
|
||||
push @{$options{set}}, "xrange [:] noextend";
|
||||
push @{$options{set}}, "yrange [:] reverse noextend";
|
||||
}
|
||||
|
||||
if ( ! -r $options{image} )
|
||||
@@ -614,51 +617,15 @@ sub getNextLine
|
||||
sub mainThread
|
||||
{
|
||||
local *PIPE;
|
||||
my $dopersist = '';
|
||||
|
||||
if( getGnuplotVersion() >= 4.3 && # --persist not available before this
|
||||
|
||||
# --persist is needed for the "half-alive" state (see documentation for
|
||||
# --exit). This state is only used with these options:
|
||||
!$options{stream} && $options{exit})
|
||||
{
|
||||
$dopersist = '--persist';
|
||||
}
|
||||
|
||||
# We trap SIGINT to kill the data input, but keep the plot up. see
|
||||
# documentation for --exit
|
||||
if ($options{stream} && !$options{exit})
|
||||
{
|
||||
$SIG{INT} = sub
|
||||
{
|
||||
print STDERR "$0 received SIGINT. Send again to quit\n";
|
||||
$SIG{INT} = undef;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if(exists $options{dump})
|
||||
{
|
||||
*PIPE = *STDOUT;
|
||||
}
|
||||
else
|
||||
{
|
||||
my $geometry = defined $options{geometry} ?
|
||||
"-geometry $options{geometry}" : '';
|
||||
open PIPE, "|gnuplot $geometry $dopersist" or die "Can't initialize gnuplot\n";
|
||||
}
|
||||
autoflush PIPE 1;
|
||||
|
||||
my $outputfile;
|
||||
my $outputfileType;
|
||||
if( defined $options{hardcopy})
|
||||
{
|
||||
$outputfile = $options{hardcopy};
|
||||
if( $outputfile =~ /^[^|] # starts with anything other than |
|
||||
.* # stuff in the middle
|
||||
\.(eps|ps|pdf|png|svg)$/ix) # ends with a known extension
|
||||
if( $outputfile =~ /^[^|] # starts with anything other than |
|
||||
.* # stuff in the middle
|
||||
\.(eps|ps|pdf|png|svg|gp)$/ix) # ends with a known extension
|
||||
{
|
||||
$outputfileType = lc $1;
|
||||
}
|
||||
@@ -668,7 +635,8 @@ sub mainThread
|
||||
ps => 'postscript noenhanced solid color landscape 12',
|
||||
pdf => 'pdfcairo noenhanced solid color font ",12" size 11in,8.5in',
|
||||
png => 'png noenhanced size 1280,1024',
|
||||
svg => 'svg noenhanced');
|
||||
svg => 'svg noenhanced',
|
||||
gp => 'gp');
|
||||
|
||||
if( !defined $options{terminal} &&
|
||||
defined $outputfileType &&
|
||||
@@ -680,8 +648,89 @@ sub mainThread
|
||||
die "Asked to plot to file '$outputfile', but I don't know which terminal to use, and no --terminal given"
|
||||
unless $options{terminal};
|
||||
}
|
||||
print PIPE "set terminal $options{terminal}\n" if $options{terminal};
|
||||
print PIPE "set output \"$outputfile\"\n" if $outputfile;
|
||||
|
||||
|
||||
sub gpterminal
|
||||
{
|
||||
return defined $options{terminal} && $options{terminal} eq 'gp';
|
||||
}
|
||||
sub datadump_only
|
||||
{
|
||||
return
|
||||
exists $options{dump} ||
|
||||
gpterminal();
|
||||
}
|
||||
sub search_PATH
|
||||
{
|
||||
for my $pathdir (File::Spec->path())
|
||||
{
|
||||
my $gnuplot_execpath = File::Spec->catfile($pathdir, $_[0]);
|
||||
return $gnuplot_execpath
|
||||
if -x $gnuplot_execpath && ! -d $gnuplot_execpath;
|
||||
}
|
||||
return undef;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if(datadump_only())
|
||||
{
|
||||
if(gpterminal())
|
||||
{
|
||||
open PIPE, '>', $outputfile;
|
||||
|
||||
my $gnuplotpath = search_PATH('gnuplot');
|
||||
if(!defined $gnuplotpath)
|
||||
{
|
||||
print STDERR "Couldn't find the gnuplot executable path. Creating .gp file still, but omitting #!. This will NOT be self-executable";
|
||||
}
|
||||
else
|
||||
{
|
||||
chmod 0755, $outputfile;
|
||||
print PIPE "#!$gnuplotpath\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
*PIPE = *STDOUT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
my $dopersist = '';
|
||||
|
||||
if ( getGnuplotVersion() >= 4.3 && # --persist not available before this
|
||||
|
||||
# --persist is needed for the "half-alive" state (see documentation for
|
||||
# --exit). This state is only used with these options:
|
||||
!$options{stream} && $options{exit}) {
|
||||
$dopersist = '--persist';
|
||||
}
|
||||
|
||||
# We trap SIGINT to kill the data input, but keep the plot up. see
|
||||
# documentation for --exit
|
||||
if ($options{stream} && !$options{exit})
|
||||
{
|
||||
$SIG{INT} = sub
|
||||
{
|
||||
print STDERR "$0 received SIGINT. Send again to quit\n";
|
||||
$SIG{INT} = undef;
|
||||
};
|
||||
}
|
||||
|
||||
my $geometry = defined $options{geometry} ?
|
||||
"-geometry $options{geometry}" : '';
|
||||
open PIPE, "|gnuplot $geometry $dopersist" or die "Can't initialize gnuplot\n";
|
||||
autoflush PIPE 1;
|
||||
}
|
||||
|
||||
if(!gpterminal())
|
||||
{
|
||||
print PIPE "set terminal $options{terminal}\n" if $options{terminal};
|
||||
print PIPE "set output \"$outputfile\"\n" if $outputfile;
|
||||
}
|
||||
|
||||
# set up plotting style
|
||||
my $style = '';
|
||||
@@ -951,14 +1000,14 @@ sub mainThread
|
||||
splice( @fields, 0, $rangesize ) ) . "\n",
|
||||
$domain0_numeric);
|
||||
|
||||
$i_column++;
|
||||
$i_column += $rangesize;
|
||||
}
|
||||
}
|
||||
|
||||
# finished reading in all. Plot what we have
|
||||
plotStoredData() unless $options{stream} && $options{exit};
|
||||
|
||||
if ( defined $options{hardcopy})
|
||||
if ( defined $options{hardcopy} && !gpterminal())
|
||||
{
|
||||
print PIPE "set output\n";
|
||||
|
||||
@@ -987,7 +1036,15 @@ sub mainThread
|
||||
# we persist gnuplot, so we shouldn't need this sleep. However, once
|
||||
# gnuplot exits, but the persistent window sticks around, you can no
|
||||
# longer interactively zoom the plot. So we still sleep
|
||||
sleep(100000000) unless $options{dump} || $options{exit};
|
||||
if(gpterminal())
|
||||
{
|
||||
print PIPE "pause mouse close\n";
|
||||
close PIPE;
|
||||
}
|
||||
elsif(!($options{dump} || $options{exit}))
|
||||
{
|
||||
print PIPE "pause mouse close\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub pruneOldData
|
||||
@@ -1410,7 +1467,7 @@ points palette>), variable sizes (C<with points ps variable>), labels and so on.
|
||||
The feedgnuplot tool itself does not know about all these intricacies, but they
|
||||
can still be used, by specifying the specific style with C<--style>, and
|
||||
specifying how many values are needed for each point with any of
|
||||
C<--rangesizeall, C<--tuplesizeall>, C<--rangesize>, C<--tuplesize>. These
|
||||
C<--rangesizeall>, C<--tuplesizeall>, C<--rangesize>, C<--tuplesize>. These
|
||||
options are required I<only> for styles not explicitly supported by feedgnuplot;
|
||||
supported styles do the right thing automatically.
|
||||
|
||||
@@ -1534,15 +1591,20 @@ This command causes feedgnuplot to exit.
|
||||
|
||||
The script is able to produce hardcopy output with C<--hardcopy outputfile>. The
|
||||
output type can be inferred from the filename, if B<.ps>, B<.eps>, B<.pdf>,
|
||||
B<.svg> or B<.png> is requested. If any other file type is requested,
|
||||
B<.svg>, B<.png> or B<.gp> is requested. If any other file type is requested,
|
||||
C<--terminal> I<must> be passed in to tell gnuplot how to make the plot. If
|
||||
C<--terminal> is passed in, then the C<--hardcopy> argument only provides the
|
||||
output filename.
|
||||
|
||||
The B<.gp> output is special. Instead of asking gnuplot to plot to a particular
|
||||
terminal, writing to a B<.gp> simply dumps a self-executable gnuplot script into
|
||||
the given file. This is similar to what C<--dump> does, but writes to a file,
|
||||
and makes sure that the file can be self-executing.
|
||||
|
||||
=head2 Self-plotting data files
|
||||
|
||||
This script can be used to enable self-plotting data files. There are 2 ways of
|
||||
doing this: with a shebang (#!) or with inline perl data.
|
||||
This script can be used to enable self-plotting data files. There are several
|
||||
ways of doing this: with a shebang (#!) or with inline perl data.
|
||||
|
||||
=head3 Self-plotting data with a #!
|
||||
|
||||
@@ -1576,6 +1638,11 @@ characters and that the full path to feedgnuplot must be given. The 127
|
||||
character limit is a serious limitation, but this can likely be resolved with a
|
||||
kernel patch. I have only tried on Linux 2.6.
|
||||
|
||||
=head3 Self-plotting data with gnuplot
|
||||
|
||||
Running C<feedgnuplot --hardcopy plotdata.gp ....> will create a self-executable
|
||||
gnuplot script in C<plotdata.gp>
|
||||
|
||||
=head3 Self-plotting data with perl inline data
|
||||
|
||||
Perl supports storing data and code in the same file. This can also be used to
|
||||
|
@@ -16,7 +16,7 @@ _arguments -S
|
||||
'--zlabel:Z-axis label:' \
|
||||
'--title:Plot title:' \
|
||||
'--autolegend[Label each plot with its data ID]' \
|
||||
'(--3d)--xlen[the size of the x-window to plot]::window size:' \
|
||||
'(--3d)--xlen[the size of the x-window to plot]:window size:' \
|
||||
'(--xlen)--xmin:min X:' \
|
||||
'(--xlen)--xmax:max X:' \
|
||||
'--ymin:min Y:' \
|
||||
@@ -48,7 +48,7 @@ _arguments -S
|
||||
'*--style[Additional styles for a curve]:curve id: :style:' \
|
||||
'(--3d)*--histogram:plot to treat as a histogram:' \
|
||||
'--binwidth:Histogram bin width:' \
|
||||
'--histstyle:Style of histogram:(frequency unique cumulative cnormal)' \
|
||||
'--histstyle:Style of histogram:(frequency fnormal unique cumulative cnormal)' \
|
||||
'--terminal:Terminal options to set with "set terminal":' \
|
||||
'*--legend[Legend for a curve]:curve id: :legend:' \
|
||||
'--exit[Exit gnuplot after making the plot]' \
|
||||
|
Reference in New Issue
Block a user