Mercurial > octave-nkf
diff doc/interpreter/plot.txi @ 3294:bfe1573bd2ae
[project @ 1999-10-19 10:06:07 by jwe]
author | jwe |
---|---|
date | Tue, 19 Oct 1999 10:08:42 +0000 |
parents | |
children | a4cd1e9d9962 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/interpreter/plot.txi Tue Oct 19 10:08:42 1999 +0000 @@ -0,0 +1,747 @@ +@c Copyright (C) 1996, 1997 John W. Eaton +@c This is part of the Octave manual. +@c For copying conditions, see the file gpl.texi. + +@node Plotting, Matrix Manipulation, Input and Output, Top +@chapter Plotting + +All of Octave's plotting functions use @code{gnuplot} to handle the +actual graphics. There are two low-level functions, @code{gplot} and +@code{gsplot}, that behave almost exactly like the corresponding +@code{gnuplot} functions @code{plot} and @code{splot}. A number of +other higher level plotting functions, patterned after the graphics +functions found in @sc{Matlab} version 3.5, are also available. +These higher level functions are all implemented in terms of the two +low-level plotting functions. + +@menu +* Two-Dimensional Plotting:: +* Specialized Two-Dimensional Plots:: +* Three-Dimensional Plotting:: +* Plot Annotations:: +* Multiple Plots on One Page:: +@end menu + +@node Two-Dimensional Plotting, Specialized Two-Dimensional Plots, Plotting, Plotting +@section Two-Dimensional Plotting + +@deffn {Command} gplot @var{ranges} @var{expression} @var{using} @var{title} @var{style} +Generate a 2-dimensional plot. + +The @var{ranges}, @var{using}, @var{title}, and @var{style} arguments +are optional, and the @var{using}, @var{title} and @var{style} +qualifiers may appear in any order after the expression. You may plot +multiple expressions with a single command by separating them with +commas. Each expression may have its own set of qualifiers. + +The optional item @var{ranges} has the syntax + +@example +[ x_lo : x_up ] [ y_lo : y_up ] +@end example + +@noindent +and may be used to specify the ranges for the axes of the plot, +independent of the actual range of the data. The range for the y axes +and any of the individual limits may be omitted. A range @code{[:]} +indicates that the default limits should be used. This normally means +that a range just large enough to include all the data points will be +used. + +The expression to be plotted must not contain any literal matrices +(e.g. @code{[ 1, 2; 3, 4 ]}) since it is nearly impossible to +distinguish a plot range from a matrix of data. + +See the help for @code{gnuplot} for a description of the syntax for the +optional items. + +By default, the @code{gplot} command plots the second column of a matrix +versus the first. If the matrix only has one column, it is taken as a +vector of y-coordinates and the x-coordinate is taken as the element +index, starting with zero. For example, + +@example +gplot rand (100,1) with linespoints +@end example + +@noindent +will plot 100 random values and connect them with lines. When +@code{gplot} is used to plot a column vector, the indices of the +elements are taken as x values. + + If there are more than two columns, you can +choose which columns to plot with the @var{using} qualifier. For +example, given the data + +@example +x = (-10:0.1:10)'; +data = [x, sin(x), cos(x)]; +@end example + +@noindent +the command + +@example +gplot [-11:11] [-1.1:1.1] \ + data with lines, data using 1:3 with impulses +@end example + +@noindent +will plot two lines. The first line is generated by the command +@code{data with lines}, and is a graph of the sine function over the +range @minus{}10 to 10. The data is taken from the first two columns of +the matrix because columns to plot were not specified with the +@var{using} qualifier. + +The clause @code{using 1:3} in the second part of this plot command +specifies that the first and third columns of the matrix @code{data} +should be taken as the values to plot. + +In this example, the ranges have been explicitly specified to be a bit +larger than the actual range of the data so that the curves do not touch +the border of the plot. +@end deffn + +@deffn {Command} gset options +@deffnx {Command} gshow options +@deffnx {Command} replot options +In addition to the basic plotting commands, the whole range of +@code{gset} and @code{gshow} commands from @code{gnuplot} are available, +as is @code{replot}. + +@findex set +@findex show +Note that in Octave 2.0, the @code{set} and @code{show} commands were +renamed to @code{gset} and @code{gshow} in order to allow for +compatibility with the @sc{Matlab} graphics and GUI commands in a future +version of Octave. (For now, the old @code{set} and @code{show} +commands do work, but they print an annoying warning message to try to +get people to switch to using @code{gset} and @code{gshow}.) + +The @code{gset} and @code{gshow} commands allow you to set and show +@code{gnuplot} parameters. For more information about the @code{gset} +and @code{gshow} commands, see the documentation for @code{set} and +@code{show} in the @code{gnuplot} user's guide (also available on line +if you run @code{gnuplot} directly, instead of running it from Octave). + +The @code{replot} command allows you to force the plot to be +redisplayed. This is useful if you have changed something about the +plot, such as the title or axis labels. The @code{replot} command also +accepts the same arguments as @code{gplot} or @code{gsplot} (except for +data ranges) so you can add additional lines to existing plots. + +For example, + +@example +gset term tek40 +gset output "/dev/plotter" +gset title "sine with lines and cosine with impulses" +replot "sin (x) w l" +@end example + +will change the terminal type for plotting, add a title to the current +plot, add a graph of +@iftex +@tex +$\sin(x)$ +@end tex +@end iftex +@ifinfo +sin (x) +@end ifinfo +to the plot, and force the new plot to be +sent to the plot device. This last step is normally required in order +to update the plot. This default is reasonable for slow terminals or +hardcopy output devices because even when you are adding additional +lines with a replot command, gnuplot always redraws the entire plot, and +you probably don't want to have a completely new plot generated every +time something as minor as an axis label changes. + +@findex shg +The command @code{shg} is equivalent to executing @code{replot} without +any arguments. +@end deffn + +@defvr {Built-in Variable} automatic_replot +You can tell Octave to redisplay the plot each time anything about it +changes by setting the value of the builtin variable +@code{automatic_replot} to a nonzero value. Since this is fairly +inefficient, the default value is 0. +@end defvr + +Note that NaN values in the plot data are automatically omitted, and +Inf values are converted to a very large value before calling gnuplot. + +@c XXX FIXME XXX -- add info about what to do to get plots on remote X +@c terminals. People often forget how to properly set DISPLAY and run +@c xhost. + +@c XXX FIXME XXX -- add info about getting paper copies of plots. + +The @sc{Matlab}-style two-dimensional plotting commands are: + +@cindex plotting +@cindex graphics + +@deftypefn {Function File} {} plot (@var{args}) +This function produces two-dimensional plots. Many different +combinations of arguments are possible. The simplest form is + +@example +plot (@var{y}) +@end example + +@noindent +where the argument is taken as the set of @var{y} coordinates and the +@var{x} coordinates are taken to be the indices of the elements, +starting with 1. + +If more than one argument is given, they are interpreted as + +@example +plot (@var{x}, @var{y}, @var{fmt} ...) +@end example + +@noindent +where @var{y} and @var{fmt} are optional, and any number of argument +sets may appear. The @var{x} and @var{y} values are +interpreted as follows: + +@itemize @bullet +@item +If a single data argument is supplied, it is taken as the set of @var{y} +coordinates and the @var{x} coordinates are taken to be the indices of +the elements, starting with 1. + +@item +If the first argument is a vector and the second is a matrix, the +the vector is plotted versus the columns (or rows) of the matrix. +(using whichever combination matches, with columns tried first.) + +@item +If the first argument is a matrix and the second is a vector, the +the columns (or rows) of the matrix are plotted versus the vector. +(using whichever combination matches, with columns tried first.) + +@item +If both arguments are vectors, the elements of @var{y} are plotted versus +the elements of @var{x}. + +@item +If both arguments are matrices, the columns of @var{y} are plotted +versus the columns of @var{x}. In this case, both matrices must have +the same number of rows and columns and no attempt is made to transpose +the arguments to make the number of rows match. + +If both arguments are scalars, a single point is plotted. +@end itemize + +The @var{fmt} argument, if present is interpreted as follows. If +@var{fmt} is missing, the default gnuplot line style is assumed. + +@table @samp +@item - +Set lines plot style (default). + +@item . +Set dots plot style. + +@item @@ +Set points plot style. + +@item -@@ +Set linespoints plot style. + +@item ^ +Set impulses plot style. + +@item L +Set steps plot style. + +@item # +Set boxes plot style. + +@item ~ +Set errorbars plot style. + +@item #~ +Set boxerrorbars plot style. + +@item @var{n} +Interpreted as the plot color if @var{n} is an integer in the range 1 to +6. + +@item @var{nm} +If @var{nm} is a two digit integer and @var{m} is an integer in the +range 1 to 6, @var{m} is interpreted as the point style. This is only +valid in combination with the @code{@@} or @code{-@@} specifiers. + +@item @var{c} +If @var{c} is one of @code{"r"}, @code{"g"}, @code{"b"}, @code{"m"}, +@code{"c"}, or @code{"w"}, it is interpreted as the plot color (red, +green, blue, magenta, cyan, or white). + +@item + +@itemx * +@itemx o +@itemx x +Used in combination with the points or linespoints styles, set the point +style. +@end table + +The color line styles have the following meanings on terminals that +support color. + +@example +Number Gnuplot colors (lines)points style + 1 red * + 2 green + + 3 blue o + 4 magenta x + 5 cyan house + 6 brown there exists +@end example + +Here are some plot examples: + +@example +plot (x, y, "@@12", x, y2, x, y3, "4", x, y4, "+") +@end example + +This command will plot @code{y} with points of type 2 (displayed as +@samp{+}) and color 1 (red), @code{y2} with lines, @code{y3} with lines of +color 4 (magenta) and @code{y4} with points displayed as @samp{+}. + +@example +plot (b, "*") +@end example + +This command will plot the data in the variable @code{b} will be plotted +with points displayed as @samp{*}. +@end deftypefn + +@deftypefn {Function File} {} hold @var{args} +Tell Octave to `hold' the current data on the plot when executing +subsequent plotting commands. This allows you to execute a series of +plot commands and have all the lines end up on the same figure. The +default is for each new plot command to clear the plot device first. +For example, the command + +@example +hold on +@end example + +@noindent +turns the hold state on. An argument of @code{off} turns the hold state +off, and @code{hold} with no arguments toggles the current hold state. +@end deftypefn + +@deftypefn {Function File} {} ishold +Return 1 if the next line will be added to the current plot, or 0 if +the plot device will be cleared before drawing the next line. +@end deftypefn + +@deftypefn {Function File} {} clearplot +@deftypefnx {Function File} {} clg +Clear the plot window and any titles or axis labels. The name +@code{clg} is aliased to @code{clearplot} for compatibility with @sc{Matlab}. + +The commands @kbd{gplot clear}, @kbd{gsplot clear}, and @kbd{replot +clear} are equivalent to @code{clearplot}. (Previously, commands like +@kbd{gplot clear} would evaluate @code{clear} as an ordinary expression +and clear all the visible variables.) +@end deftypefn + +@deftypefn {Function File} {} closeplot +Close stream to the @code{gnuplot} subprocess. If you are using X11, +this will close the plot window. +@end deftypefn + +@deftypefn {Function File} {} purge_tmp_files +Delete the temporary files created by the plotting commands. + +Octave creates temporary data files for @code{gnuplot} and then sends +commands to @code{gnuplot} through a pipe. Octave will delete the +temporary files on exit, but if you are doing a lot of plotting you may +want to clean up in the middle of a session. + +A future version of Octave will eliminate the need to use temporary +files to hold the plot data. +@end deftypefn + +@deftypefn {Function File} {} axis (@var{limits}) +Sets the axis limits for plots. + +The argument @var{limits} should be a 2, 4, or 6 element vector. The +first and second elements specify the lower and upper limits for the x +axis. The third and fourth specify the limits for the y axis, and the +fifth and sixth specify the limits for the z axis. + +With no arguments, @code{axis} turns autoscaling on. + +If your plot is already drawn, then you need to use @code{replot} before +the new axis limits will take effect. You can get this to happen +automatically by setting the built-in variable @code{automatic_replot} +to a nonzero value. +@end deftypefn + +@node Specialized Two-Dimensional Plots, Three-Dimensional Plotting, Two-Dimensional Plotting, Plotting +@section Specialized Two-Dimensional Plots + +@deftypefn {Function File} {} bar (@var{x}, @var{y}) +Given two vectors of x-y data, @code{bar} produces a bar graph. + +If only one argument is given, it is taken as a vector of y-values +and the x coordinates are taken to be the indices of the elements. + +If two output arguments are specified, the data are generated but +not plotted. For example, + +@example +bar (x, y); +@end example + +@noindent +and + +@example +[xb, yb] = bar (x, y); +plot (xb, yb); +@end example + +@noindent +are equivalent. +@end deftypefn + +@deftypefn {Function File} {} contour (@var{z}, @var{n}, @var{x}, @var{y}) +Make a contour plot of the three-dimensional surface described by +@var{z}. Someone needs to improve @code{gnuplot}'s contour routines +before this will be very useful. +@end deftypefn + +@deftypefn {Function File} {} hist (@var{y}, @var{x}) +Produce histogram counts or plots. + +With one vector input argument, plot a histogram of the values with +10 bins. The range of the histogram bins is determined by the range +of the data. + +Given a second scalar argument, use that as the number of bins. + +Given a second vector argument, use that as the centers of the bins, +with the width of the bins determined from the adjacent values in +the vector. + +Extreme values are lumped in the first and last bins. + +With two output arguments, produce the values @var{nn} and @var{xx} such +that @code{bar (@var{xx}, @var{nn})} will plot the histogram. +@end deftypefn + +@deftypefn {Function File} {} loglog (@var{args}) +Make a two-dimensional plot using log scales for both axes. See the +description of @code{plot} above for a description of the arguments that +@code{loglog} will accept. +@end deftypefn + +@deftypefn {Function File} {} polar (@var{theta}, @var{rho}) +Make a two-dimensional plot given polar the coordinates @var{theta} and +@var{rho}. +@end deftypefn + +@deftypefn {Function File} {} semilogx (@var{args}) +Make a two-dimensional plot using a log scale for the @var{x} axis. See +the description of @code{plot} above for a description of the arguments +that @code{semilogx} will accept. +@end deftypefn + +@deftypefn {Function File} {} semilogy (@var{args}) +Make a two-dimensional plot using a log scale for the @var{y} axis. See +the description of @code{plot} above for a description of the arguments +that @code{semilogy} will accept. +@end deftypefn + +@deftypefn {Function File} {} stairs (@var{x}, @var{y}) +Given two vectors of x-y data, bar produces a `stairstep' plot. + +If only one argument is given, it is taken as a vector of y-values +and the x coordinates are taken to be the indices of the elements. + +If two output arguments are specified, the data are generated but +not plotted. For example, + +@example +stairs (x, y); +@end example + +@noindent +and + +@example +[xs, ys] = stairs (x, y); +plot (xs, ys); +@end example + +@noindent +are equivalent. +@end deftypefn + +@node Three-Dimensional Plotting, Plot Annotations, Specialized Two-Dimensional Plots, Plotting +@section Three-Dimensional Plotting + +@deffn {Command} gsplot @var{ranges} @var{expression} @var{using} @var{title} @var{style} +Generate a 3-dimensional plot. + +The @var{ranges}, @var{using}, @var{title}, and @var{style} arguments +are optional, and the @var{using}, @var{title} and @var{style} +qualifiers may appear in any order after the expression. You may plot +multiple expressions with a single command by separating them with +commas. Each expression may have its own set of qualifiers. + +The optional item @var{ranges} has the syntax + +@example +[ x_lo : x_up ] [ y_lo : y_up ] [ z_lo : z_up ] +@end example + +@noindent +and may be used to specify the ranges for the axes of the plot, +independent of the actual range of the data. The range for the y and z +axes and any of the individual limits may be omitted. A range +@code{[:]} indicates that the default limits should be used. This +normally means that a range just large enough to include all the data +points will be used. + +The expression to be plotted must not contain any literal matrices (e.g. +@code{[ 1, 2; 3, 4 ]}) since it is nearly impossible to distinguish a +plot range from a matrix of data. + +See the help for @code{gnuplot} for a description of the syntax for the +optional items. + +By default, the @code{gsplot} command plots each column of the +expression as the z value, using the row index as the x value, and the +column index as the y value. The indices are counted from zero, not +one. For example, + +@example +gsplot rand (5, 2) +@end example + +@noindent +will plot a random surface, with the x and y values taken from the row +and column indices of the matrix. + +If parametric plotting mode is set (using the command +@kbd{gset parametric}, then @code{gsplot} takes the columns of the +matrix three at a time as the x, y and z values that define a line in +three space. Any extra columns are ignored, and the x and y values are +expected to be sorted. For example, with @code{parametric} set, it +makes sense to plot a matrix like +@iftex +@tex +$$ +\left[\matrix{ +1 & 1 & 3 & 2 & 1 & 6 & 3 & 1 & 9 \cr +1 & 2 & 2 & 2 & 2 & 5 & 3 & 2 & 8 \cr +1 & 3 & 1 & 2 & 3 & 4 & 3 & 3 & 7}\right] +$$ +@end tex +@end iftex +@ifinfo + +@example +1 1 3 2 1 6 3 1 9 +1 2 2 2 2 5 3 2 8 +1 3 1 2 3 4 3 3 7 +@end example +@end ifinfo + +@noindent +but not @code{rand (5, 30)}. +@end deffn + +The @sc{Matlab}-style three-dimensional plotting commands are: + +@deftypefn {Function File} {} mesh (@var{x}, @var{y}, @var{z}) +Plot a mesh given matrices @code{x}, and @var{y} from @code{meshdom} and +a matrix @var{z} corresponding to the @var{x} and @var{y} coordinates of +the mesh. +@end deftypefn + +@deftypefn {Function File} {} meshdom (@var{x}, @var{y}) +Given vectors of @var{x} and @var{y} coordinates, return two matrices +corresponding to the @var{x} and @var{y} coordinates of the mesh. + +See the file @file{sombrero.m} for an example of using @code{mesh} and +@code{meshdom}. +@end deftypefn + +@defvr {Built-in Variable} gnuplot_binary +The name of the program invoked by the plot command. The default value +is @code{"gnuplot"}. @xref{Installation}. +@end defvr + +@defvr {Built-in Variable} gnuplot_has_frames +If the value of this variable is nonzero, Octave assumes that your copy +of gnuplot has support for multiple frames that is included in recent +3.6beta releases. It's initial value is determined by configure, but it +can be changed in your startup script or at the command line in case +configure got it wrong, or if you upgrade your gnuplot installation. +@end defvr + +@deftypefn {Function File} {} figure (@var{n}) +Set the current plot window to plot window @var{n}. This function +currently requires X11 and a version of gnuplot that supports multiple +frames. +@end deftypefn + +@defvr {Built-in Variable} gnuplot_has_multiplot +If the value of this variable is nonzero, Octave assumes that your copy +of gnuplot has the multiplot support that is included in recent +3.6beta releases. It's initial value is determined by configure, but it +can be changed in your startup script or at the command line in case +configure got it wrong, or if you upgrade your gnuplot installation. +@end defvr + +@node Plot Annotations, Multiple Plots on One Page, Three-Dimensional Plotting, Plotting +@section Plot Annotations + +@deftypefn {Function File} {} grid +For two-dimensional plotting, force the display of a grid on the plot. +@end deftypefn + +@deftypefn {Function File} {} title (@var{string}) +Specify a title for the plot. If you already have a plot displayed, use +the command @code{replot} to redisplay it with the new title. +@end deftypefn + +@deftypefn {Function File} {} xlabel (@var{string}) +@deftypefnx {Function File} {} ylabel (@var{string}) +@deftypefnx {Function File} {} zlabel (@var{string}) +Specify x, y, and z axis labels for the plot. If you already have a plot +displayed, use the command @code{replot} to redisplay it with the new +labels. +@end deftypefn + +@node Multiple Plots on One Page, , Plot Annotations, Plotting +@section Multiple Plots on One Page + +The following functions all require a version of @code{gnuplot} that +supports the multiplot feature. + +@deftypefn {Function File} {} mplot (@var{x}, @var{y}) +@deftypefnx {Function File} {} mplot (@var{x}, @var{y}, @var{fmt}) +@deftypefnx {Function File} {} mplot (@var{x1}, @var{y1}, @var{x2}, @var{y2}) +This is a modified version of the @code{plot} function that works with +the multiplot version of @code{gnuplot} to plot multiple plots per page. +This plot version automatically advances to the next subplot position +after each set of arguments are processed. + +See the description of the @var{plot} function for the various options. +@end deftypefn + +@deftypefn {Function File} {} multiplot (@var{xn}, @var{yn}) +Sets and resets multiplot mode. + +If the arguments are non-zero, @code{multiplot} will set up multiplot +mode with @var{xn}, @var{yn} subplots along the @var{x} and @var{y} +axes. If both arguments are zero, @code{multiplot} closes multiplot +mode. +@end deftypefn + +@deftypefn {Function File} {} oneplot () +If in multiplot mode, switches to single plot mode. +@end deftypefn + +@deftypefn {Function File} {} plot_border (...) +Multiple arguments allowed to specify the sides on which the border +is shown. Allowed arguments include: + +@table @code +@item "blank" +No borders displayed. + +@item "all" +All borders displayed + +@item "north" +North Border + +@item "south" +South Border + +@item "east" +East Border + +@item "west" +West Border +@end table + +@noindent +The arguments may be abbreviated to single characters. Without any +arguments, @code{plot_border} turns borders off. +@end deftypefn + +@deftypefn {Function File} {} subplot (@var{rows}, @var{cols}, @var{index}) +@deftypefnx {Function File} {} subplot (@var{rcn}) +Sets @code{gnuplot} in multiplot mode and plots in location +given by index (there are @var{cols} by @var{rows} subwindows). + +Input: + +@table @var +@item rows +Number of rows in subplot grid. + +@item columns +Number of columns in subplot grid. + +@item index +Index of subplot where to make the next plot. +@end table + +If only one argument is supplied, then it must be a three digit value +specifying the location in digits 1 (rows) and 2 (columns) and the plot +index in digit 3. + +The plot index runs row-wise. First all the columns in a row are filled +and then the next row is filled. + +For example, a plot with 4 by 2 grid will have plot indices running as +follows: +@iftex +@tex +\vskip 10pt +\hfil\vbox{\offinterlineskip\hrule +\halign{\vrule#&&\qquad\hfil#\hfil\qquad\vrule\cr +height13pt&1&2&3&4\cr height12pt&&&&\cr\noalign{\hrule} +height13pt&5&6&7&8\cr height12pt&&&&\cr\noalign{\hrule}}} +\hfil +\vskip 10pt +@end tex +@end iftex +@ifinfo +@display +@group ++-----+-----+-----+-----+ +| 1 | 2 | 3 | 4 | ++-----+-----+-----+-----+ +| 5 | 6 | 7 | 8 | ++-----+-----+-----+-----+ +@end group +@end display +@end ifinfo +@end deftypefn + +@deftypefn {Function File} {} subwindow (@var{xn}, @var{yn}) +Sets the subwindow position in multiplot mode for the next plot. The +multiplot mode has to be previously initialized using the +@code{multiplot} function, otherwise this command just becomes an alias +to @code{multiplot} +@end deftypefn + +@deftypefn {Function File} {} top_title (@var{string}) +@deftypefnx {Function File} {} bottom_title (@var{string}) +Makes a title with text @var{string} at the top (bottom) of the plot. +@end deftypefn