# Matlab as a graphing scientific calculator (Part III)

## Topics in this lab

## Introduction

In this lab, you will learn the basics of plotting in Matlab.

Before we begin, let's clear the workspace of any variable we have
previously stored

clear all; format short

Back to the top

## Using 'linspace' for plotting purposes

For plotting purposes, we will use the linspace command. For example, to divide the interval $[0.2,6.5]$ into 200 subintervals, we use the command

```
N = 200; % Number of subintervals
x = linspace(0.2,6.4,N+1);
```

Back to the top

## Plotting curves

Matlab has an extremely powerful set of tools for plotting functions in
one, two and three dimensions. We will explore some very basic
one-dimensional plotting commands here.

Suppose we want to graph the function
$$ f(x) = \cos(2 \pi x) $$

over the interval (domain) [-2,2].
First, we construct an array x (our domain) over
which to compute the function values y. Then
evaluate y.

`x = linspace(-2,2,101); % Domain over which to plot our function`

Evalute the function

`y = cos(2*pi*x); % y value corresponding to x values in our domain`

Don't forget to use the semi-colon, or you will print all 101 values to the screen. To create a plot of y verses x, use the Matlab plot command :

plot(x,y)

The plot brings up a new window, called a
*figure window*. Near the top of the window, you should see a
number associated with this window. This is our first plot, so the
figure number is '1'.

To get help on the plot command, use the keyword plot.

>> help plotplotLinear plot.plot(X,Y) plots vector Y versus vector X. If X or Y is a matrix, then the vector is plotted versus the rows or columns of the matrix, whichever line up. If X is a scalar and Y is a vector, disconnected line objects are created and plotted as discrete points vertically at X. .......

Back to the top

## Axis limits

To determine axis limits, Matlab uses the minimum and maximum of your
x and y values. In our
current example, our x values were in the range $x \in [-2,2]$ and our y were in the range $x \in
[-1,1]$. We can change this viewing "window", or axes limits using
the axis command.

This command takes an array argument defined using the square brackets []. To adjust the limits on our current figure window, to region $[-1, 1]\times [-2, 2]$. we can use

axis([-1 1 -2 2])

You can set the axis limits for each axis separately using the commands xlim and ylim. For example,

xlim([-2 2])

ylim([-1 1])

restores the axis to their original settings.

To retrieve these values from the current figure window, we just use the
xlim and ylim without
arguments.

xlim

ans = -2 2

ylim

ans = -1 1

You may also want to preserve the aspect ratio of the plot, so that visually, 1 unit of distance on the x-axis is the same as 1-unit on the y-axis. The command

daspect([1 1 1])

is one way to do this. The first two arguments indicate the relative ratio of the x and y axis. The third argument is for the z-axis, and can be always set to 1 for 2d plots.

>> help axisaxisControl axis scaling and appearance.axis([XMIN XMAX YMIN YMAX]) sets scaling for the x- and y-axes on the current plot. ....................

>> help xlimxlimX limits. XL =xlimgets the x limits of the current axes.xlim([XMIN XMAX]) sets the x limits. ....................

>> help ylimylimY limits. YL =ylimgets the y limits of the current axes.ylim([YMIN YMAX]) sets the y limits. ....................

Back to the top

## Adding additional plots to an existing window

Very often, we wish to add additional curves to existing plots. This be easily done with the hold command. First, we will clear the current figure window, re-draw our previous plot, "hold" the state of the first plot, and then add a second plot.

clf

plot(x,y)

`hold on`

plot(2*x,y/2)

To plot a curve in red instead of the default blue, add a color attribute to the plot command :

`plot(2*x,y/2,'r')`

Also available are different line types, e.g. dashed lines, dotted lines, and so on. To use these, you can augment the color command with a line style. For example, to get a dashed line, use the '--' line attribute. Using an additional argument in this string, we can specify both the color and the line type :

`plot(4*x,y/4,'k--')`

Back to the top

## Adding symbols to the plot

We can add symbols to the plot as well. Suppose we want to put a symbols at each maximum value and minimum of the function $$ g(x) = \cos(4 \pi x)/4 \\ g'(x) = -\pi\sin(4\pi x) $$. This function has a minimum or maximum whenever $g'(x) = 0$, i.e. at $$x_{minmax} = [-1.5, -1, -0.5, 0, 0.5, 1, 1.5]$$ so we will create a simple array to store these values:

xminmax = [-1.5, -1, -0.5, 0, 0.5, 1, 1.5];

We can now plot a symbol at each $(x,y)$

plot(4*xminmax, cos(2*pi*xminmax)/4,'k.','markersize',30)

Note that particulary for the '.' symbol, it is useful (if not critical)
to set the marker size. Otherwise, the '.' is too small to see on the
plot.

You can experiment with different colors, line styles, and symbols by getting
help on the plot command. For example,
some common colors, styles and symbols are

>> help plot ........................ Various line types, plot symbols and colors may be obtained with plot(X,Y,S) where S is a character string made from one element from any or all the following 3 columns: b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star (none) no line y yellow s square k black d diamond w white v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram ......................

Back to the top

## Adding a title and axis labels

A plot is not complete without a title, and axes labels. Use the following commands to add these items to your plot.

`xlabel('x')`

`ylabel('y')`

`title('A simple plot')`

You can change the font-size (among other things) by passing additional arguments to the xlabel, ylabel and title commands:

xlabel('x','fontsize',18)

ylabel('f(x)','fontsize',18)

`set(gca,'fontsize',18)`

title('A simple function','fontsize',18,'fontweight','bold')

Back to the top

## Printing the figure window

Eventually, you will want to print you plot for use in other documents, such as Word, Latex, or a webpage. You can produce an image file in any number of formats. A format that works well for most purposes is the % PNG (Portable Graphics Format). To print out your figure using this format, use the print command:

print -dpng simple_function.png

A list of available formats can be found by looking at help on print command.

>> help print print Print figure or model. Save to disk as image or MATLAB file. ...................... print -device -options filename If you specify a filename, MATLAB directs output to a file instead of a printer. print adds the appropriate file extension if you do not specify one. ..................... Built-in MATLAB Drivers: ..................... -depsc2 % Encapsulated Level 2 Color PostScript ..................... -djpeg% JPEG image, quality level of nn (figures only) E.g., -djpeg90 gives a quality level of 90. Quality level defaults to 75 if nn is omitted. ..................... -dtiff % TIFF with packbits (lossless run-length encoding) compression (figures only) ..................... -dpng % Portable Network Graphic 24-bit truecolor image (figures only)

Many of the commands discussed above for adding titles and so on to your plots can be done from menu items in the figure window. These are handy if you plan to make a plot only once. But often, you will run a simulation several times, and would like all of your plot attributes to be added automatically. For this reason, we have discussed mainly the command line methods for modifying plots.

Back to the top

## Clearing and closing graphics windows

To clear the graphics window you can use the clf command, which stands for "clear figure". This only removes any plotting elements from the current figure window but does not close the window itself.

>> clf

To close out a figure window can use the close command.

>> close all

You can selectively close figure windows by supplying an argument to the close command:

>> close(1)

Back to the top

## The EZ way to plot

The easiest way to plot a function using Matlab is to use the ezplot command. At its simplest, this command requires a single argument, the function handle.

`close all;`

f = @(x) exp(cos(x)).*sin(x);

ezplot(f);

By default, ezplots plots over the range $[-2\pi, 2\pi]$. To specify a custom range over which to plot the function, pass in two additional arguments, the left and right endpoints of the range in an two element array.

a = -pi/2;

b = 3*pi/2;

ezplot(f,[a b]);

Using ezplot, you can still add titles and axes
labels to your plots as before. In fact, it is possible to change most
aspects of the plot, such as the line type and color, using what is known
as "Handle Graphics".

The main drawback to the ezplot command is that
it is somewhat limited. For example, there is no clear way to include
parameters in the function, either as pre-defined variables, or as
arguments. Because of this limitation, and others, ezplot should be reserved for simple plots of
functions of one or two variables of the form $f(x)$ or $g(x,y)$.

Back to the top

## Lab exercises

- On the same graph, plot $y = f(x)$, $y = f(x/10)$ and $y = f(10x)$.
- Plot $y = g(f(x))$
- Plot $y = g(x)f(10h(x))$

Graph this function over the domain

**[-5,5]**. Provide enough resolution (i.e. number of points) in your plot so you see the features of the plot. Now, using what you remember from Calculus I, do the following

- For a given
**x**value in the domain**[-5,5]**, plot a line*tangent*to the curve at point**x**. Try different values of 'x' so you are convinced that you have the correct secant line. - Place a symbol at the point where your line is tangent to the curve
- On the same plot, graph the derivative of the function, and show that the zero-crossings of the derivatives coincide exactly with the maximum and minimums of the original function. You can indicate this graphically by drawing vertical lines connecting the zero crossings of the derivative with the extrema of the original function.

*scripts*to save commands to a file.

Compare your answers with the solutions.

Back to the top

## Get the code

Do you want to try the above code fragments on your own? Download the Matlab script that produces this page here. (lab_3.m)

Published with MATLAB® 8.4