2010-01-13 13:39:02 +08:00
|
|
|
feedGnuplot README
|
|
|
|
==================
|
|
|
|
|
|
|
|
This is a flexible, command-line-oriented frontend to Gnuplot. It creates
|
|
|
|
plots from data coming in on STDIN or given in a filename passed on the
|
|
|
|
commandline. Various data representations are supported, as is hardcopy
|
|
|
|
output and streaming display of live data. A simple example:
|
|
|
|
|
2010-08-01 12:39:40 +08:00
|
|
|
|
2010-01-13 13:39:02 +08:00
|
|
|
seq 5 | awk '{print 2*$1, $1*$1}' |
|
|
|
|
feedGnuplot.pl --lines --points --legend "data 0" --title "Test plot" --y2 1
|
|
|
|
|
2010-08-01 12:39:40 +08:00
|
|
|
|
2010-01-13 13:39:02 +08:00
|
|
|
You should see a plot with two curves (one on the y1 axis and the other on
|
|
|
|
the y2 axis), a legend and a title. The first line of the example generates
|
|
|
|
some data to plot and the second reads it in from STDIN and generates the
|
|
|
|
plot. None of the commandline-options are required for the most basic
|
|
|
|
plotting. Input parsing is flexible; every line need not have the same
|
|
|
|
number of points. New curves will be created as needed.
|
|
|
|
|
|
|
|
By default, the line number of the incoming data is used for the x-axis. To
|
|
|
|
plot an x-y dataset, feed in the x values as the first element in every line
|
|
|
|
and pass in --domain. With the previous example:
|
|
|
|
|
2010-08-01 12:39:40 +08:00
|
|
|
|
2010-01-13 13:39:02 +08:00
|
|
|
seq 5 | awk '{print 2*$1, $1*$1}' |
|
|
|
|
feedGnuplot.pl --domain --lines --points --legend "data 0" --title "Test plot" --y2 1
|
|
|
|
|
2010-08-01 12:39:40 +08:00
|
|
|
|
2010-01-13 13:39:02 +08:00
|
|
|
we get only one curve, with different x values. As many points as desired
|
|
|
|
can appear on a single line, but all points on a line are associated with
|
|
|
|
the X value that starts that line.
|
|
|
|
|
|
|
|
By default, each column represents a separate curve. If sparse data is to be
|
2010-10-24 08:22:29 +08:00
|
|
|
plotted, this is undesireable. With the --dataid option, each point in the
|
|
|
|
input is preceded by string identifying the curve the point belongs
|
2010-01-13 13:39:02 +08:00
|
|
|
to. With the previous example:
|
|
|
|
|
2010-08-01 12:39:40 +08:00
|
|
|
|
2010-01-13 13:39:02 +08:00
|
|
|
seq 5 | awk '{print 2*$1, $1*$1}' |
|
2010-10-24 08:22:29 +08:00
|
|
|
feedGnuplot.pl --dataid --lines --points --legend "data 0" --title "Test plot" --y2 1
|
2010-01-13 13:39:02 +08:00
|
|
|
|
2010-08-01 12:39:40 +08:00
|
|
|
|
2010-01-13 13:39:02 +08:00
|
|
|
we get 5 different curves with one point in each. The first column, as
|
|
|
|
produced by awk, is '2,4,6,8,10'. These are interpreted as the indices of
|
|
|
|
the curves to be plotted. The feedGnuplot.pl script created 11 different
|
|
|
|
curves (0-10 inclusive), but only 5 of them were given any data. Note that
|
|
|
|
with this invocation of the example no legend was created. This is because
|
|
|
|
the legend commandline parameters are applied in order to curves
|
|
|
|
0,1,2,... Above, "data 0" applied to curve 0, which had no data. If we
|
|
|
|
passed in --legend "data 0" --legend "data 1" --legend "data 2", a legend
|
|
|
|
would be created with "data 2" labeled, but no labels for the other
|
|
|
|
curves. As many points as desired can appear on a single line, and --domain
|
2010-10-24 08:22:29 +08:00
|
|
|
can be used together with --dataid.
|
|
|
|
|
|
|
|
Note that the IDs used with --dataid are general strings, NOT just
|
|
|
|
numbers. These IDs can be used to generate the plot legend with --autolegend.
|
2010-01-13 13:39:02 +08:00
|
|
|
|
|
|
|
The script is able to produce hardcopy output with "--hardcopy
|
|
|
|
outputfile". The output type is inferred from the filename with .ps, .pdf
|
|
|
|
and .png currently supported.
|
|
|
|
|
2010-02-18 13:34:51 +08:00
|
|
|
If live data is received in realtime, feedGnuplot.pl can be used to produce a
|
|
|
|
realtime display by passing in the --stream option. The "--xlen windowsize"
|
|
|
|
option can be passed in also to plot a scrolling window, containing the last
|
|
|
|
windowsize-worth of data (windowsize has the units of the x axis, whether it
|
|
|
|
is a point index or the passed-in domain). If --xlen is omitted or set to 0,
|
|
|
|
all of the available data is plotted, with no moving window. The realtime data
|
|
|
|
is updated at 1 Hz, so the script can handle rapidly-incoming data without
|
2010-08-01 12:46:32 +08:00
|
|
|
spending all of its time replotting. Example:
|
|
|
|
|
|
|
|
|
2010-08-01 15:01:09 +08:00
|
|
|
seq 500 | awk '{print 2*$1, $1*$1; system("sleep 2"); fflush()}' |
|
2010-08-01 12:46:32 +08:00
|
|
|
feedGnuplot.pl --stream --lines --points --legend "data 0" --title "Test plot" --y2 1
|
|
|
|
|
2010-01-13 13:39:02 +08:00
|
|
|
|
2010-08-01 15:01:09 +08:00
|
|
|
This script can be used to generate self-plotting data files. If a file
|
|
|
|
called 'data' is created with:
|
|
|
|
|
|
|
|
|
|
|
|
#!/usr/local/bin/feedGnuplot.pl --lines --points --legend "data 0" --title "Test plot" --y2 1
|
|
|
|
2 1
|
|
|
|
4 4
|
|
|
|
6 9
|
|
|
|
8 16
|
|
|
|
10 25
|
|
|
|
12 36
|
|
|
|
14 49
|
|
|
|
16 64
|
|
|
|
18 81
|
|
|
|
20 100
|
|
|
|
22 121
|
|
|
|
24 144
|
|
|
|
26 169
|
|
|
|
28 196
|
|
|
|
30 225
|
|
|
|
|
|
|
|
|
|
|
|
This file can be plotted with
|
|
|
|
|
|
|
|
|
|
|
|
bash$ ./tst
|
|
|
|
|
|
|
|
|
|
|
|
The caveats here are that on Linux the whole #! line is limited to 127
|
|
|
|
charaters and that the full path to feedGnuplot.pl must be given.
|
|
|
|
|
|
|
|
For more information, invoke with --help, or read the source. Any bugs or
|
|
|
|
suggestions should be addressed to dkogan@cds.caltech.edu. The latest
|
|
|
|
version of the script is available at http://github.com/dkogan/feedgnuplot
|
2010-01-26 13:35:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
This program is originally based on the driveGnuPlots.pl script from
|
|
|
|
Thanassis Tsiodras. It is available from his site at
|
|
|
|
http://users.softlab.ece.ntua.gr/~ttsiod/gnuplotStreaming.html
|