#### 15.1.1 Two-Dimensional Plots

The `plot` function allows you to create simple x-y plots with linear axes. For example,

         x = -10:0.1:10;
         plot (x, sin (x));

displays a sine wave shown in fig:plot. On most systems, this command will open a separate plot window to display the graph.

Figure 15.1: Simple Two-Dimensional Plot.

The function `fplot` also generates two-dimensional plots with linear axes using a function name and limits for the range of the x-coordinate instead of the x and y data. For example,

         fplot (@sin, [-10, 10], 201);

produces a plot that is equivalent to the one above, but also includes a legend displaying the name of the plotted function.

— Function File: plot (y)
— Function File: plot (x, y)
— Function File: plot (x, y, property, value, ...)
— Function File: plot (x, y, fmt)
— Function File: plot (h, ...)

> Produces two-dimensional plots. Many different combinations of arguments are possible. The simplest form is

>               plot (y)

> where the argument is taken as the set of y coordinates and the x coordinates are taken to be the indices of the elements, starting with 1.

> To save a plot, in one of several image formats such as PostScript or PNG, use the `print` command.

> If more than one argument is given, they are interpreted as

>               plot (y, property, value, ...)

> or

>               plot (x, y, property, value, ...)

> or

>               plot (x, y, fmt, ...)

> and so on. Any number of argument sets may appear. The x and y values are interpreted as follows:

> - If a single data argument is supplied, it is taken as the set of y coordinates and the x coordinates are taken to be the indices of the elements, starting with 1.
> - If the x is a vector and y is a matrix, then the columns (or rows) of y are plotted versus x. (using whichever combination matches, with columns tried first.)
> - If the x is a matrix and y is a vector, y is plotted versus the columns (or rows) of x. (using whichever combination matches, with columns tried first.)
> - If both arguments are vectors, the elements of y are plotted versus the elements of x.
> - If both arguments are matrices, the columns of y are plotted versus the columns of 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.

> Multiple property-value pairs may be specified, but they must appear in pairs. These arguments are applied to the lines drawn by `plot`.

> If the fmt argument is supplied, it is interpreted as follows. If fmt is missing, the default gnuplot line style is assumed.

> ``-`'
>   Set lines plot style (default).
> ``.`'
>   Set dots plot style.
> ``L`'
>   Set steps plot style.
> ``n`'
>   Interpreted as the plot color if n is an integer in the range 1 to 6.
> ``nm`'
>   If nm is a two digit integer and m is an integer in the range 1 to 6, m is interpreted as the point style. This is only valid in combination with the `@` or `-@` specifiers.
> ``c`'
>   If c is one of `"k"` (black), `"r"` (red), `"g"` (green), `"b"` (blue), `"m"` (magenta), `"c"` (cyan), or `"w"` (white), it is interpreted as the line plot color.
> ``";title;"`'
>   Here `"title"` is the label for the key.
> ``+`'
> ``*`'
> ``o`'
> ``x`'
> ``^`'
>   Used in combination with the points or linespoints styles, set the point style.

> The fmt argument may also be used to assign key titles. To do so, include the desired title between semi-colons after the formatting sequence described above, e.g. "+3;Key Title;" Note that the last semi-colon is required and will generate an error if it is left out.

> Here are some plot examples:

>               plot (x, y, "@12", x, y2, x, y3, "4", x, y4, "+")

> This command will plot `y` with points of type 2 (displayed as ``+`') and color 1 (red), `y2` with lines, `y3` with lines of color 4 (magenta) and `y4` with points displayed as ``+`'.

>               plot (b, "*", "markersize", 3)

> This command will plot the data in the variable `b`, with points displayed as ``*`' with a marker size of 3.

>               t = 0:0.1:6.3;
>               plot (t, cos(t), "-;cos(t);", t, sin(t), "+3;sin(t);");

> This will plot the cosine and sine functions and label them accordingly in the key.

> If the first argument is an axis handle, then plot into these axes, rather than the current axis handle returned by `gca`.

> See also: semilogx, semilogy, loglog, polar, mesh, contour, bar, stairs, errorbar, xlabel, ylabel, title, print.

— Function File: fplot (fn, limits)
— Function File: fplot (fn, limits, tol)
— Function File: fplot (fn, limits, n)
— Function File: fplot (..., fmt)

> Plot a function fn, within the defined limits. fn an be either a string, a function handle or an inline function. The limits of the plot are given by limits of the form `[`xlo`,` xhi`]` or `[`xlo`,` xhi`,` ylo`,` yhi`]`. tol is the default tolerance to use for the plot, and if tol is an integer it is assumed that it defines the number points to use in the plot. The fmt argument is passed to the plot command.

>                  fplot ("cos", [0, 2*pi])
>                  fplot ("[cos(x), sin(x)]", [0, 2*pi])

> See also: plot.

The functions `semilogx`, `semilogy`, and `loglog` are similar to the `plot` function, but produce plots in which one or both of the axes use log scales.

— Function File: semilogx (args)

> Produce a two-dimensional plot using a log scale for the x axis. See the description of `plot` for a description of the arguments that `semilogx` will accept.

> See also: plot, semilogy, loglog.

— Function File: semilogy (args)

> Produce a two-dimensional plot using a log scale for the y axis. See the description of `plot` for a description of the arguments that `semilogy` will accept.

> See also: plot, semilogx, loglog.

— Function File: loglog (args)

> Produce a two-dimensional plot using log scales for both axes. See the description of `plot` for a description of the arguments that `loglog` will accept.

> See also: plot, semilogx, semilogy.

The functions `bar`, `barh`, `stairs`, and `stem` are useful for displaying discrete data. For example,

         hist (randn (10000, 1), 30);

produces the histogram of 10,000 normally distributed random numbers shown in fig:hist.

Figure 15.2: Histogram.

— Function File: bar (x, y)
— Function File: bar (y)
— Function File: bar (x, y, w)
— Function File: bar (x, y, w, style)
— Function File: h = bar (..., prop, val)
— Function File: bar (h, ...)

> Produce a bar graph from two vectors of x-y data.

> 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.

> The default width of 0.8 for the bars can be changed using w.

> If y is a matrix, then each column of y is taken to be a separate bar graph plotted on the same graph. By default the columns are plotted side-by-side. This behavior can be changed by the style argument, which can take the values `"grouped"` (the default), or `"stacked"`.

> The optional return value h provides a handle to the patch object. Whereas the option input handle h allows an axis handle to be passed. Properties of the patch graphics object can be changed using prop, val pairs.

> See also: barh, plot.

— Function File: barh (x, y)
— Function File: barh (y)
— Function File: barh (x, y, w)
— Function File: barh (x, y, w, style)
— Function File: h = barh (..., prop, val)
— Function File: barh (h, ...)

> Produce a horizontal bar graph from two vectors of x-y data.

> 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.

> The default width of 0.8 for the bars can be changed using w.

> If y is a matrix, then each column of y is taken to be a separate bar graph plotted on the same graph. By default the columns are plotted side-by-side. This behavior can be changed by the style argument, which can take the values `"grouped"` (the default), or `"stacked"`.

> The optional return value h provides a handle to the patch object. Whereas the option input handle h allows an axis handle to be passed. Properties of the patch graphics object can be changed using prop, val pairs.

> See also: bar, plot.

— Function File: hist (y, x, norm)

> 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. With one matrix input argument, plot a hystogram where each bin contains a bar per input column.

> 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.

> If third argument is provided, the histogram is normalised such that the sum of the bars is equal to norm.

> Extreme values are lumped in the first and last bins.

> With two output arguments, produce the values nn and xx such that `bar (`xx`,` nn`)` will plot the histogram.

> See also: bar.

— Function File: stairs (x, y)

> Produce a stairstep plot. The arguments may be vectors or matrices.

> 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,

>               stairs (x, y);

> and

>               [xs, ys] = stairs (x, y);
>               plot (xs, ys);

> are equivalent.

> See also: plot, semilogx, semilogy, loglog, polar, mesh, contour, bar, xlabel, ylabel, title.

— Function File: h = stem (x, y, linespec)

> Plot a stem graph and return the handles of the line and marker objects used to draw the stems. The default color is `"r"` (red). The default line style is `"-"` and the default marker is `"o"`.

> For example,

>               x = 1:10;
>               stem (x);

> plots 10 stems with heights from 1 to 10;

>               x = 1:10;
>               y = ones (1, length (x))*2.*x;
>               stem (x, y);

> plots 10 stems with heights from 2 to 20;

>               x = 1:10;
>               y = ones (size (x))*2.*x;
>               h = stem (x, y, "b");

> plots 10 bars with heights from 2 to 20 (the color is blue, and h is a 2-by-10 array of handles in which the first row holds the line handles and the second row holds the marker handles);

>               x = 1:10;
>               y = ones (size (x))*2.*x;
>               h = stem (x, y, "-.k");

> plots 10 stems with heights from 2 to 20 (the color is black, line style is `"-."`, and h is a 2-by-10 array of handles in which the first row holds the line handles and the second row holds the marker handles);

>               x = 1:10;
>               y = ones (size (x))*2.*x;
>               h = stem (x, y, "-.k.");

> plots 10 stems with heights from 2 to 20 (the color is black, line style is `"-."` and the marker style is `"."`, and h is a 2-by-10 array of handles in which the first row holds the line handles and the second row holds the marker handles);

>               x = 1:10;
>               y = ones (size (x))*2.*x;
>               h = stem (x, y, "fill");

> plots 10 stems with heights from 2 to 20 (the color is rgb-triple defined, the line style is `"-"`, the marker style is `"o"`, and h is a 2-by-10 array of handles in which the first row holds the line handles and the second row holds the marker handles).

> Color definitions with rgb-triples are not valid!

> See also: bar, barh, plot.

The `contour`, `contourf` and `contourc` functions produce two-dimensional contour plots from three dimensional data.

— Function File: contour (z)
— Function File: contour (z, vn)
— Function File: contour (x, y, z)
— Function File: contour (x, y, z, vn)
— Function File: contour (..., style)
— Function File: contour (h, ...)
— Function File: [c, h] = contour (...)

> Plot level curves (contour lines) of the matrix z, using the contour matrix c computed by `contourc` from the same arguments; see the latter for their interpretation. The set of contour levels, c, is only returned if requested. For example:

>               x = 0:2;
>               y = x;
>               z = x' * y;
>               contour (x, y, z, 2:3)

> The style to use for the plot can be defined with a line style style in a similar manner to the line styles used with the `plot` command. Any markers defined by style are ignored.

> The optional input and output argument h allows an axis handle to be passed to `contour` and the handles to the contour objects to be returned.

> See also: contourc, patch, plot.

— Function File: [c, h] = contourf (x, y, z, lvl)
— Function File: [c, h] = contourf (x, y, z, n)
— Function File: [c, h] = contourf (x, y, z)
— Function File: [c, h] = contourf (z, n)
— Function File: [c, h] = contourf (z, lvl)
— Function File: [c, h] = contourf (z)
— Function File: [c, h] = contourf (ax, ...)
— Function File: [c, h] = contourf (..., "property", val)

> Compute and plot filled contours of the matrix z. Parameters x, y and n or lvl are optional.

> The return value c is a 2xn matrix containing the contour lines as described in the help to the contourc function.

> The return value h is handle-vector to the patch objects creating the filled contours.

> If x and y are ommited they are taken as the row/column index of z. n is a scalar denoting the number of lines to compute. Alternatively lvl is a vector containing the contour levels. If only one value (e.g. lvl0) is wanted, set lvl to [lvl0, lvl0]. If both n or lvl are omitted a default value of 10 contour level is assumed.

> If provided, the filled contours are added to the axes object ax instead of the current axis.

> The following example plots filled contours of the `peaks` function.

>               [x, y, z] = peaks (50);
>               contourf (x, y, z, -7:9)

> See also: contour, contourc, patch.

— Function File: [c, lev] = contourc (x, y, z, vn)

> Compute isolines (contour lines) of the matrix z. Parameters x, y and vn are optional.

> The return value lev is a vector of the contour levels. The return value c is a 2 by n matrix containing the contour lines in the following format

>               c = [lev1, x1, x2, ..., levn, x1, x2, ...
>                    len1, y1, y2, ..., lenn, y1, y2, ...]

> in which contour line n has a level (height) of levn and length of lenn.

> If x and y are omitted they are taken as the row/column index of z. vn is either a scalar denoting the number of lines to compute or a vector containing the values of the lines. If only one value is wanted, set vn`= [val, val]`; If vn is omitted it defaults to 10.

> For example,

>               x = 0:2;
>               y = x;
>               z = x' * y;
>               contourc (x, y, z, 2:3)
>               =>   2.0000   2.0000   1.0000   3.0000   1.5000   2.0000
>                    2.0000   1.0000   2.0000   2.0000   2.0000   1.5000

> See also: contour.

The `errorbar`, `semilogxerr`, `semilogyerr`, and `loglogerr` functions produces plots with error bar markers. For example,

         x = 0:0.1:10;
         y = sin (x);
         yp =  0.1 .* randn (size (x));
         ym = -0.1 .* randn (size (x));
         errorbar (x, sin (x), ym, yp);

produces the figure shown in fig:errorbar.

Figure 15.3: Errorbar plot.

— Function File: errorbar (args)

> This function produces two-dimensional plots with errorbars. Many different combinations of arguments are possible. The simplest form is

>               errorbar (y, ey)

> where the first argument is taken as the set of y coordinates and the second argument ey is taken as the errors of the y values. x coordinates are taken to be the indices of the elements, starting with 1.

> If more than two arguments are given, they are interpreted as

>               errorbar (x, y, ..., fmt, ...)

> where after x and y there can be up to four error parameters such as ey, ex, ly, uy etc., depending on the plot type. Any number of argument sets may appear, as long as they are separated with a format string fmt.

> If y is a matrix, x and error parameters must also be matrices having same dimensions. The columns of y are plotted versus the corresponding columns of x and errorbars are drawn from the corresponding columns of error parameters.

> If fmt is missing, yerrorbars ("~") plot style is assumed.

> If the fmt argument is supplied, it is interpreted as in normal plots. In addition the following plot styles are supported by errorbar:

> ``~`'
>   Set yerrorbars plot style (default).
> ``>`'
>   Set xerrorbars plot style.
> ``~>`'
>   Set xyerrorbars plot style.
> ``#`'
>   Set boxes plot style.
> ``#~`'
>   Set boxerrorbars plot style.
> ``#~>`'
>   Set boxxyerrorbars plot style.

> Examples:

>               errorbar (x, y, ex, ">")

> produces an xerrorbar plot of y versus x with x errorbars drawn from x-ex to x+ex.

>               errorbar (x, y1, ey, "~",
>               x, y2, ly, uy)

> produces yerrorbar plots with y1 and y2 versus x. Errorbars for y1 are drawn from y1-ey to y1+ey, errorbars for y2 from y2-ly to y2+uy.

>               errorbar (x, y, lx, ux,
>               ly, uy, "~>")

> produces an xyerrorbar plot of y versus x in which x errorbars are drawn from x-lx to x+ux and y errorbars from y-ly to y+uy.

> See also: semilogxerr, semilogyerr, loglogerr.

— Function File: semilogxerr (args)

> Produce two-dimensional plots on a semilogarithm axis with errorbars. Many different combinations of arguments are possible. The most used form is

>               semilogxerr (x, y, ey, fmt)

> which produces a semi-logarithm plot of y versus x with errors in the y-scale defined by ey and the plot format defined by fmt. See errorbar for available formats and additional information.

> See also: errorbar, loglogerr semilogyerr.

— Function File: semilogyerr (args)

> Produce two-dimensional plots on a semilogarithm axis with errorbars. Many different combinations of arguments are possible. The most used form is

>               semilogyerr (x, y, ey, fmt)

> which produces a semi-logarithm plot of y versus x with errors in the y-scale defined by ey and the plot format defined by fmt. See errorbar for available formats and additional information.

> See also: errorbar, loglogerr semilogxerr.

— Function File: loglogerr (args)

> Produce two-dimensional plots on double logarithm axis with errorbars. Many different combinations of arguments are possible. The most used form is

>               loglogerr (x, y, ey, fmt)

> which produces a double logarithm plot of y versus x with errors in the y-scale defined by ey and the plot format defined by fmt. See errorbar for available formats and additional information.

> See also: errorbar, semilogxerr, semilogyerr.

Finally, the `polar` function allows you to easily plot data in polar coordinates. However, the display coordinates remain rectangular and linear. For example,

         polar (0:0.1:10*pi, 0:0.1:10*pi);

produces the spiral plot shown in fig:polar.

Figure 15.4: Polar plot.

— Function File: polar (theta, rho, fmt)

> Make a two-dimensional plot given the polar coordinates theta and rho.

> The optional third argument specifies the line type.

> See also: plot.

— Function File: pie (y)
— Function File: pie (y, explode)
— Function File: pie (..., labels)
— Function File: pie (h, ...);
— Function File: h = pie (...);

> Produce a pie chart.

> Called with a single vector argument, produces a pie chart of the elements in x, with the size of the slice determined by percentage size of the values of x.

> The variable explode is a vector of the same length as x that if non zero 'explodes' the slice from the pie chart.

> If given labels is a cell array of strings of the same length as x, giving the labels of each of the slices of the pie chart.

> The optional return value h provides a handle to the patch object.

> See also: bar, stem.

— Function File: quiver (u, v)
— Function File: quiver (x, y, u, v)
— Function File: quiver (..., s)
— Function File: quiver (..., style)
— Function File: quiver (..., 'filled')
— Function File: quiver (h, ...)
— Function File: h = quiver (...)

> Plot the `(`u`,` v`)` components of a vector field in an `(`x`,` y`)` meshgrid. If the grid is uniform, you can specify x and y as vectors.

> If x and y are undefined they are assumed to be `(1:`m`, 1:`n`)` where `[`m`,` n`] = size(`u`)`.

> The variable s is a scalar defining a scaling factor to use for the arrows of the field relative to the mesh spacing. A value of 0 disables all scaling. The default value is 1.

> The style to use for the plot can be defined with a line style style in a similar manner to the line styles used with the `plot` command. If a marker is specified then markers at the grid points of the vectors are printed rather than arrows. If the argument 'filled' is given then the markers as filled.

> The optional return value h provides a list of handles to the the parts of the vector field (body, arrow and marker).

>               [x, y] = meshgrid (1:2:20);
>               quiver (x, y, sin (2*pi*x/10), sin (2*pi*y/10));

> See also: plot.

— Function File: pcolor (x, y, c)
— Function File: pcolor (c)

> Density plot for given matrices x, and y from `meshgrid` and a matrix c corresponding to the x and y coordinates of the mesh's vertices. If x and y are vectors, then a typical vertex is (x(j), y(i), c(i,j)). Thus, columns of c correspond to different x values and rows of c correspond to different y values.

> The `colormap` is scaled to the extents of c. Limits may be placed on the color axis by the command `caxis`, or by setting the `clim` property of the parent axis.

> The face color of each cell of the mesh is determined by interpolating the values of c for the cell's vertices. Contrast this with `imagesc` which renders one cell for each element of c.

> `shading` modifies an attribute determining the manner by which the face color of each cell is interpolated from the values of c, and the visibility of the cells' edges. By default the attribute is "faceted", which renders a single color for each cell's face with the edge visible.

> h is the handle to the surface object.

> See also: caxis, contour, meshgrid, imagesc, shading.

— Function File: area (x, y)
— Function File: area (x, y, lvl)
— Function File: area (..., prop, val, ...)
— Function File: area (y, ...)
— Function File: area (h, ...)
— Function File: h = area (...)

> Area plot of cumulative sum of the columns of y. This shows the contributions of a value to a sum, and is functionally similar to `plot (`x`, cumsum (`y`, 2))`, except that the area under the curve is shaded.

> If the x argument is omitted it is assumed to be given by `1 : rows (`y`)`. A value lvl can be defined that determines where the base level of the shading under the curve should be defined.

> Additional arguments to the `area` function are passed to the `patch`. The optional return value h provides a handle to the list of patch objects.

> See also: plot, patch.

The axis function may be used to change the axis limits of an existing plot and various other axis properties, such as the aspect ratio and the appearance of tic marks.

— Function File: axis (limits)

> Set axis limits for plots.

> The argument 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.

> Without any arguments, `axis` turns autoscaling on.

> With one output argument, `x=axis` returns the current axes

> The vector argument specifying limits is optional, and additional string arguments may be used to specify various axis properties. For example,

>               axis ([1, 2, 3, 4], "square");

> forces a square aspect ratio, and

>               axis ("labely", "tic");

> turns tic marks on for all axes and tic mark labels on for the y-axis only.

> The following options control the aspect ratio of the axes.

> `"square"`
>   Force a square aspect ratio.
> `"equal"`
>   Force x distance to equal y-distance.
> `"normal"`
>   Restore the balance.

> The following options control the way axis limits are interpreted.

> `"auto"`
>   Set the specified axes to have nice limits around the data or all if no axes are specified.
> `"manual"`
>   Fix the current axes limits.
> `"tight"`
>   Fix axes to the limits of the data (not implemented).

> The option `"image"` is equivalent to `"tight"` and `"equal"`.

> The following options affect the appearance of tic marks.

> `"on"`
>   Turn tic marks and labels on for all axes.
> `"off"`
>   Turn tic marks off for all axes.
> `"tic[xyz]"`
>   Turn tic marks on for all axes, or turn them on for the specified axes and off for the remainder.
> `"label[xyz]"`
>   Turn tic labels on for all axes, or turn them on for the specified axes and off for the remainder.
> `"nolabel"`
>   Turn tic labels off for all axes.
> Note, if there are no tic marks for an axis, there can be no labels.

> The following options affect the direction of increasing values on the axes.

> `"ij"`
>   Reverse y-axis, so lower values are nearer the top.
> `"xy"`
>   Restore y-axis, so higher values are nearer the top.

> If an axes handle is passed as the first argument, then operate on this axes rather than the current axes.

Similarly the axis limits of the colormap can be changed with the caxis function.

— Function File: caxis (limits)
— Function File: caxis (h, ...)

> Set color axis limits for plots.

> The argument limits should be a 2 element vector specifying the lower and upper limits to assign to the first and last value in the colormap. Values outside this range are clamped to the first and last colormap entries.

> If limits is 'auto', then automatic colormap scaling is applied, whereas if limits is 'manual' the colormap scaling is set to manual.

> Called without any arguments to current color axis limits are returned.

> If an axes handle is passed as the first argument, then operate on this axes rather than the current axes.