Plotting Fundamentals: (Attaway Ch 2.5, (10))
Quibble Question
How long would it take you to walk to the moon (assuming there
was a footpath)? A day? a week? a month? a year? a lifetime? more?
Plotting
 We only need simple plotting in 160. Attaway Section
2.5 is really enough.

But if you want to have fun,
Matlab has supersophisticated plotting (Attaway Chapter 10 is a start).
Back in 1996 the hardcopy manual for plotting and graphics was 200 pages long.

Functionality we need for the rest of this course is all mentioned in
Sect. 2.5 but it's a terse treatment.

Matlab help and examples (templates)
are useful tools (too much to remember otherwise).
Getting Started
The following help request is enough to get all sorts of pointers
to useful Matlab functions. More help is available for each individually.
>> help graph2d
Elementary XY graphs.
plot  Linear plot.
loglog  Loglog scale plot.
semilogx  Semilog scale plot.
semilogy  Semilog scale plot.
...
Axis control.
axis  Control axis scaling and appearance.
zoom  Zoom in and out on a 2D plot.
grid  Grid lines.
...
Graph annotation.
plotedit  Tools for editing and annotating plots.
title  Graph title.
xlabel  Xaxis label.
ylabel  Yaxis label.
...
Hardcopy and printing.
print  Print graph or Simulink system;
or save graph to Mfile.
printopt  Printer defaults.
...
See also graph3d, specgraph.
The Minimum You Need to Know
 A few builtin functions:
plot,
semilogx,
semilogy,
loglog,
surf,
clf,
figure,
hold,
xlabel,
ylabel,
title,
legend,
grid.
 How to control how the plotline looks using
arguments to plot.
 The basic appearance and functionality of the
Figure Window (where plots show up).
Basic Builtin Plot Functions

plot, surf produce 2D line
and 3D surface plots in the figure window.

figure, clf,
create and clear plotwindows.

hold
allows several plots to be drawn into one figure.
Calling hold alone is a 'toggle'.
Clearer is
hold on to start accumulating plots in the current figure and
hold off to start replacing the current figure with each
new plot command.

grid with various suffixes is used to control the appearance of
grid lines in the plot.

xlabel, ylabel, title, and legend
label your plot in various ways for
inclusion into a report so your reader knows what the axes mean, what
the plot is supposed to show, and what data is represented by the
different lines on the plot.

Use help to discover more about these functions!!
Calling plot()
There is no substitute for
help plot, (unless you want to find out even more
by reading the online manual)

Plot Vanilla:
plot(X,Y)
Plots vector Y versus vector X. Various OK things happen if X or Y is
a matrix or scalar.

Plot Usual:
plot(X,Y, 'option_string')
Plots vector Y versus vector X. The short (usually 2 or 3character,
1 to 4 characters possible) option
string
describes
the color, plotmarkers, or linetypes in the plot.
For example, 'r' produces a red line.

Plot Trivial but Useful Special Case:
plot(Y)
Plots elements of vector Y versus their index. So if Y is an Nvector,
X axis is 1, 2, 3,...., N.

To produce loglog and semilog plots, use
loglog(), semilogx(), and semilogy(),
which have the same syntax as plot().

There are all sorts of additional commands and arguments that
allow you to change the viewpoint, the mode of display, the
shading, the colors, etc., etc. Some of this can be tracked down
using help. Other parts of it require knowing something
about 3D visualization and graphics, and more complete reading in the manual.
Calling surf()
A lot more possible complexity, having an extra dimension to visualize.
help is still some help. "Surf" is short for "surface"
Here think of a function
z(x,y), and think of visualizing z as a height above the xy plane.

Surf Easy Special Case
surf(A)
Displays a surface corresponding to the values in the 2D array A,
where the row is considered to correspond to the y coordinate,
the column to the x coordinate, and the array value to the z coordinate.
With beautiful falsecolor height coding. And grid lines.
It may be necessary to make the call view(3) to
get a nice 3D view.

Surf Usual:
surf(xrange, yrange, A)
This call takes a vector of x values (the xrange) a vector
of y values (the yrange), and a 2D array of z values of size(yrange)
rows by size(xrange) cols, and produces a visualization of the surface.
plot() Option Strings
The options string sent as a last argument to plot
(and discussed in Attaway 2.5.1.1)
controls how your "plot line" looks, for example:
'bo' plot points as blue circles
'mx' plot points as magenta x's
'r' connect data points, plot as red solid line
'g.' connect data points, plot as green dashdot line
'ro' red line AND circles.
So
Data = [1 3 4 5];
plot(Data, 'r');
hold on;
plot(Data, 'b*');
Yields
Attaway shows at end of 2.5.2 a little 9line script that
creates an xrange, plots sin(x) and cos(x) on same axes,
and illustrates the use of legend and title
commands. Check it out for yourselves.
Saving a Plot as a File
You will be featuring plots in your project writeups as a major
tool in helping yourself and your readers understand ('visualize')
your
results.
 Make sure you have informative title, legend, x and y axis
labels.
 Make sure your axis and data ranges show the phenomena
you want to illustrate.
 Pick colors, line styles, and plot symbols
that maximally clarify your results.
In the resulting Figure window with your gorgeous plot,
 Go to File
 Go to Save As...
 Type a descriptive name into the File Name box, no suffix.
 Go to Files of Type dropdown and pick a type. I like JPEG
image (*.jpg)  pretty universal, but sometimes has compression
artifacts; *.png is a compressionless alternative.
When you pick a type the proper suffix appears on your file name
 Klik on Save
 New file appears in your working directory. Use it in your word
processor to create final .PDF file for handing in.
Some RealLife Situations

Suppose I generate answers y(x) for x = [1 10 100 1000 10000]
and want to plot y against x, but don't want 10000long vectors
99.95% full of zeros?

How do I put two or more graphs on same axes in one plot?

How do I generate more than one plot at once? Add legends? Colors?
This page shows
about 2% of Matlab's plotting power but it's all we really need.
Plot Demos
% Set up some data
xdata = zeros(1,10);
ydata = zeros(1,10);
for elt= 1:10
xdata(elt) = elt;
ydata(elt) = elt*elt;
end
plot(ydata); % defaults to plot(ydata, 'b')
title('1. line graph of i versus i*i');
figure; % create a new plot window...
%we'll wind up with 10 of em
plot(ydata, 'rd');
title('2. i versus i*i, with red diamonds');
figure;
plot(ydata, 'c'); % cyan
hold on;
plot(ydata+13, 'm'); % magenta
title('3. hold on to superimpose 2 plots');
hold off % else the rest will be superimposed
Spacedout equallyspaced X data points:
xdata = [20 40 60 80];
ydata = zeros(1,4);
yindex = 1;
for n = 1:4
ydata(n) = xdata(n) * xdata(n);
end
figure
plot(ydata, '*'); % plot line and *
title('4. x versus x*x for sparse x, squeezed');
figure
plot(xdata,ydata,'d'); % due to autoscale
% and equallyspaced X
% values, graph looks same
title('5. n versus n*n, sparse n, unsqueezed');
Spacedout UNequallyspaced X data points:
Plotting power functions
like x = y^{2}, Volume =
1/Pressure.
The loglog plot.
xdata = [2 4 8 16 32 64 ];
ydata = zeros(1,6);
for n = 1:length(xdata)
ydata(n) = xdata(n) ^ 2; % power law
end
figure
plot(ydata, 'o'); % plot with line and circle,
title('6. y = x*x, unequally spaced xs, squeezed');
figure
plot(xdata,ydata,'ro'); % now graphs different
title('7. y = x*x, unequally spaced xs unsqueezed');
figure
% loglog plot for power relationship
% yields straight line no matter how x values spaced
loglog(xdata, ydata,'gd');
title('8. y = x*x, loglog plot');
Plotting Exponential relationships like
y =e^{x}, DecayingVal = InitVal^{(.1*t)}
The semilog plot.
xdata = linspace(1,10,10);
ydata = zeros(1,10);
for n = 1:10
ydata(n) = 100 ^ (.1 * xdata(n)); % exponential
end;
figure;
plot(xdata, ydata, 'm');
title('9. exponential function');
figure;
semilogy(xdata, ydata, 'g*'); % semilog plot
title('10. exponential function, semilog plot');
Fun with Surface Plots
Making 2D plots using surf can be neat.
It can get complicated, but there are some defaults that can be used
to generate some pretty cool graphics without a lot of trouble.
For example.
a = 1 : .05 : 1; % a 41 element vector from 1 to 1
b = a .* a; % a^2 pointwise
c = linspace(1, 1, 41); % a 41 element vector of 1s
x2 = c' * b; % array representing z(x,y) = x^2
y2 = b' * c; % array representing z(x,y) = y^2
view(3); % default 3D view
figure
surf(x2); % plot the x2 array as a surface
figure
surf(y2); % plot the y2 array as a surface
Produces the following figure windows (note the toolbar!).
These were produced by a windowgrab, not by "Save As..."
(Note: The window produced by surf may need
to be closed before another surface plot can be made)
We can add x^2 and y^2 to get a paraboloid (illustrating the squared
Euclidean distance function / 2),
x2_y2 = (x2 + y2) / 2; % z(x,y) = (x^2 + y^2) / 2
figure
surf(x2_y2);
or take the outer product of a^2 with itself to get a
particular 4th order function
x2y2 = 1  b' * b; % z(x,y) = 1  x^2 * y^2
figure
surf(x2y2);
Which produces
For even more fun we can combine the last two,
z4 = x2y2 + x2_y2;
figure
surf(z4);
or make our own function using for loops.
z = zeros(41,41);
for m = 1:41
for n = 1:41
y = (m  21) / 20;
x = (n  21) / 20;
z(m,n) = (x*x + y*y) * ...
sin(1.7*pi*x) * cos(2.7*pi*y);
end
end
figure
surf(z);
Last update: 04/20/2011: RN