diff --git a/README.pod b/README.pod index 6f2f4ea..8f62efb 100644 --- a/README.pod +++ b/README.pod @@ -92,13 +92,12 @@ points. New curves will be created as needed. The most commonly used functionality of gnuplot is supported directly by the script. Anything not directly supported can still be done with options such as -C<--set>, C<--extracmds> C<--style>, etc. Arbitrary gnuplot commands can be -passed in with C<--extracmds>. For example, to turn off the grid, you can pass -in C<--extracmds 'unset grid'>. Commands C<--set> and C<--unset> exists to -provide nicer syntax, so this is equivalent to passing C<--unset grid>. As many -of these options as needed can be passed in. To add arbitrary curve styles, use -C<--style curveID extrastyle>. Pass these more than once to affect more than one -curve. +C<--set>, C<--cmds> C<--style>, etc. Arbitrary gnuplot commands can be passed in +with C<--cmds>. For example, to turn off the grid, you can pass in C<--cmds +'unset grid'>. Commands C<--set> and C<--unset> exists to provide nicer syntax, +so this is equivalent to passing C<--unset grid>. As many of these options as +needed can be passed in. To add arbitrary curve styles, use C<--style curveID +extrastyle>. Pass these more than once to affect more than one curve. To apply an extra style to I the curves that lack an explicit C<--style>, pass in C<--styleall extrastyle>. In the most common case, the extra style is @@ -239,6 +238,79 @@ Note that while gnuplot supports the time/date on any axis, I currently supports it I as the x-axis domain. This may change in the future. +=head3 'using' expressions + +We just described how feedgnuplot parses its input data. When passing this data +to gnuplot, each curve is sent independently. The domain appears in the leading +columns followed by C<--rangesize> columns to complete each row. Without +C<--domain>, feedgnuplot explicitly writes out sequential integers. gnuplot then +knows how many values it has for each point, and it knows which style we're +using, so it's able to interpret the data appropriately, and to make the correct +plot. + +As an example, if gnuplot is passed 2 columns of data, and it is plotting C, it will use column 1 for the x coordinate and column 2 for the y +coordinate. This is the default behavior, but the meaning of each column can be +controlled via a C expression in gnuplot (not feedgnuplot; keep reading). +The default is sequential integers, so this example uses C by +default. We can flip the meaning of the columns by passing C. +Arbitrary expressions may be specified by enclosing each field in C<()>, and +using C<$> to denote each data column. So to use the 2nd column as the x +coordinate and the sum of the two columns as the y coordinate, C is passed. Furthermore, the number of columns can vary. For instance +gnuplot can read the same two columns of data, but produce a plot with the extra +column encoding the sum as the color: C. +Please see the gnuplot documentation for lots of detail. + +That's how I works. Most of the time, I doesn't pass any +C expressions at all, and gnuplot does the default thing. But if we want +to do something fancy, feedgnuplot supports C<--using curveID expression> and +C<--usingall expression>. So we can plot a parabola: + + seq 100 | feedgnuplot --lines --usingall '1:($2*$2)' + +This is powerful, but there are some things to keep in mind: + +=over + +=item + +C<--using> overrides whatever C expression feedgnuplot was going to pass. +feedgnuplot passes a C expression only if C<--histogram> or C<--timefmt> +or C<--xticlabels> are given. So if C<--using> is given together with any of +these, the user must take care to do the right thing (whatever that means at +that time). + +=item + +The C<--tuplesize> controls the data passed to feedgnuplot and the data then +passed to gnuplot. It does I directly control how gnuplot eventually +interprets the data: C<--using> does that. So for instance we can plot +color-coded points: + + seq 10 | feedgnuplot --with 'points pt 7 palette' --usingall '1:2:2' + +Here feedgnuplot read 1 column of data. It defauled to C<--tuplesize 2>, so it +passed 2 columns of data to gnuplot. gnuplot then produced 3 values for each +point, and plotted them as indicated with the C style. + +=item + +You I need a column of data to generate a curve. You might want to use a +C expression to plot a time series I its cumulative integral. The +C expression can compute the integral, but you I pass in the data +twice; once for each curve to plot: + + seq 100 | \ + awk '{print $1,$1}' | \ + feedgnuplot \ + --cmds 'sum=0' \ + --cmds 'accum(x) = (sum=sum+x)' \ + --using 1 '1:(accum($2))' \ + --lines --y2 1 + +=back + =head2 Real-time streaming data To plot real-time data, pass in the C<--stream [refreshperiod]> option. Data @@ -671,13 +743,35 @@ I the curves. =item -C<--extracmds xxx> +C<--using curveID expression> + +Specifies a C expression to micromanage the plot. This is a powerful +option that allows gnuplot to interpret the input data in arbitrary ways. A +C expression tells gnuplot how to map the input columns of data to tuples +expected by the plotting style. Please see the L section above for more detail. + +=item + +C<--usingall expression> + +Global "using" expressions. This works exactly like C<--using>, except it +applies to I the curves. + +=item + +C<--cmds xxx> Additional commands to pass on to gnuplot verbatim. These could contain extra global styles for instance. Can be passed multiple times. =item +C<--extracmds xxx> + +Synonym for C<--cmds xxx> + +=item + C<--set xxx> Additional 'set' commands to pass on to gnuplot verbatim. C<--set 'a b c'> will