Title: Three Dimensional Plotting
1Three Dimensional Plotting
- Learning Objectives
- Understand the anatomy of a 3D plot
- Basics of constructing plots in 3D
- How to choose different plot types for best
effects
- Topics
- Plotting in 3D major differences
- The meshgrid() function to create plaids
- 3D mesh plots
- 3D surface plots
- shading and light sources
- Contour plots
- Use of color to add a 4th dimension
2Background
- Plotting in 3D and 3D data visualization is where
Matlabs power really becomes apparent! - Matlab defines a number of different kinds of 3D
plots but you will probably find 3 or 4 to be the
most useful - x,y,z 3D line plot plot3( )
- mesh plot mesh( )
- surface plot surf( )
- contour plot contour( )
- combo surface/mesh with contour surfc( )
- The surface plotting can also be applied to
create realistic 3D objects by defining and
plotting their exterior surfaces! - We can only touch lightly on this vast area of
Matlab
3Anatomy of a 3D Plot
- There are MANY options for plotting in 3D but we
will consider only the basics - Plotting a curve in 3D plot3(x,y,z)
- Plotting a surface, zf(x,y), in 3D mesh( )
surf( ) - There are also several other plotting topics that
we will NOT cover or discuss in class (but you
might find interesting to explore on your own) - ribbon plots
- quiver plots (showing vectors)
- volume plots
- advanced colormap use
42D Plots vs 3D Line Plots
- Actually, every 2D plot is simply a 3D plot
without the 3rd dimension being specified.
gtgt clf gtgt x00.12.pi gtgt plot(x,sin(x))
Rotate 3D button experiment with how it works
53D Line Plot
- This is the simplest (and least useful) 3D plot
and is really just a generalization of the 2D
function
gtgt x00.13.pi gtgt z1sin(x) gtgt
z2sin(2.x) gtgt z3sin(3.x) gtgt
y1zeros(size(x)) gtgt y3ones(size(x)) gtgt
y2y3./2 gtgt plot3(x,y1,z1,'r',x,y2,z2,'b',x,y3,z3
,'g') gtgt grid on gtgt xlabel('x-axis'),
ylabel('y-axis'), zlabel('z-axis')
63D Line Plot (2)
- These examples may be a little more useful
gtgt clf gtgt turns40.pi gtgt thetalinspace(0,turns,
4000) gtgt xcos(theta).(turns-theta)./turns gtgt
ysin(theta).(turns-theta)./turns gtgt
ztheta./turns gtgt plot3(x,y,z) gtgt grid on gtgt
text(0.5,0.5,0.75,'Here is a piece of text!')
gtgt theta00.110.pi gtgt plot3(sin(theta),cos(the
ta),theta) gtgt grid on theta00.110.pi gtgt
plot3(sin(theta),cos(theta),theta) gtgt grid on
73D Surface Plots
- It is often desirable to plot functions of the
form zf(x,y) - for each (x,y), we can compute a value for z
- this defines a surface in 3D space
- If we can define (x,y) at regular intervals,
Matlab provides powerful ways to plot the
resulting function as a mesh or surface in 3D. - The (x,y) values stored in arrays will define a
grid of mesh points through which the surface
will be created. - There are tools in Matlab to handle the situation
in which (x,y) are not defined in a grid, but we
won't consider them in this course. - We will look into how colors can be employed to
add the equivalent of a 4th dimension
8Defining the (x,y) Values
- We need a way to create the range of (x,y) values
needed to compute f(x,y)
This won't work because we need all values of y
for each value of x and vice versa to evaluate
function over entire region shown
x -3 -2 -1 0 1 2 3 y -3 -2 -1 0
1 2 3 zf(x,y)
This works corresponding elements of xx yy
contain the x and y coordinates to be used for
f(x,y) at that point
xx -3 -2 -1 0 1 2 3 -3
-2 -1 0 1 2 3 -3 -2
-1 0 1 2 3 -3 -2 -1
0 1 2 3 -3 -2 -1 0
1 2 3 -3 -2 -1 0 1
2 3 -3 -2 -1 0 1 2
3 yy -3 -3 -3 -3 -3 -3 -3
-2 -2 -2 -2 -2 -2 -2 -1
-1 -1 -1 -1 -1 -1 0 0
0 0 0 0 0 1 1 1
1 1 1 1 2 2 2 2
2 2 2 3 3 3 3 3
3 3 zf(xx,yy)
NOTExx varies along ROWS while yy varies along
COLUMNS
9The meshgrid() Function
- Matlab provides a function to compute these
arrays
gtgt x-3.53.5 gtgt y-2.52.5 gtgt
xx,yymeshgrid(x,y) xx -3.5 -2.5 -1.5
-0.5 0.5 1.5 2.5 3.5 -3.5 -2.5 -1.5
-0.5 0.5 1.5 2.5 3.5 -3.5 -2.5 -1.5
-0.5 0.5 1.5 2.5 3.5 -3.5 -2.5 -1.5
-0.5 0.5 1.5 2.5 3.5 -3.5 -2.5 -1.5
-0.5 0.5 1.5 2.5 3.5 -3.5 -2.5 -1.5
-0.5 0.5 1.5 2.5 3.5 yy -2.5 -2.5
-2.5 -2.5 -2.5 -2.5 -2.5 -2.5 -1.5 -1.5
-1.5 -1.5 -1.5 -1.5 -1.5 -1.5 -0.5 -0.5
-0.5 -0.5 -0.5 -0.5 -0.5 -0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5 0.5 1.5 1.5
1.5 1.5 1.5 1.5 1.5 1.5 2.5 2.5
2.5 2.5 2.5 2.5 2.5 2.5
NOTE 1xx varies along ROWS while yy
varies along COLUMNS
NOTE 2For any (i, j), the value in xx is the x
coordinate, while the value in yy is the y
coordinate xx(3,1) -3.5 yy(3,1) -0.5 So
(x,y) (-3.5, -0.5)
NOTE 3Matlab calls these arrays "plaids"
NOTE 4We can use array math to efficiently
compute the z values when zf(x,y)
10Simple Example Using meshgrid()
- In this case we will plot z (x2 y2) over the
range -3 ? x ? 3 and -3 ? y ? 3
gtgt x-33 gtgt y-33 gtgt xx,yymeshgrid(x,y) xx
3 -2 -1 0 1 2 3
-3 -2 -1 0 1 2 3 -3
-2 -1 0 1 2 3 -3 -2
-1 0 1 2 3 -3 -2 -1
0 1 2 3 -3 -2 -1 0
1 2 3 -3 -2 -1 0 1
2 3 yy -3 -3 -3 -3 -3 -3
-3 -2 -2 -2 -2 -2 -2 -2
-1 -1 -1 -1 -1 -1 -1 0
0 0 0 0 0 0 1 1
1 1 1 1 1 2 2 2
2 2 2 2 3 3 3 3
3 3 3 gtgt zzxx.2 yy.2 gtgt
mesh(xx,yy,zz)
NOTEMatlab's array instructions make this a
deceptively simple calculation for all values at
once
11Calculation of f(x,y)
- Calculation of f(x,y) can be tricky depending on
exactly how it is defined over the "plaid" (see
MM pg. 384)
Column-wise Calculation of z f(x,y)
gtgt nclength(x) number of columns in z gtgt
nrlength(y) number of rows in z gtgt
zzeros(nr,nc) initialize z (for speed) gtgt for
k1nc z(,k) x(k).2 y().2 end gtgt
mesh(xx,yy,z)
NOTEIt can be very tricky to keep track of the
row and column indices in this kind of
calculation (it appears that the text in the
book is incorrect)
12Calculation of f(x,y) - cont'd
- Worst case is that you may have to compute each
element of z explicitly as follows
Element-by-element Calculation of z f(x,y)
gtgt nclength(x) number of columns in z gtgt
nrlength(y) number of rows in z gtgt
zzeros(nr,nc) initialize z (for speed) gtgt for
kc1nc for kr1nr z(kr,kc)
x(kc).2 y(kr).2 end end gtgt mesh( gtgt
mesh(xx,yy,z)
NOTEIt can be very tricky to keep track of the
row and column indices in this kind of
calculation
13Key Concepts for zf(x,y) Plots
- 3D plotting introduces several key concepts
- Meshes versus Surfaces
- Hidden line removal
- Pedestals and contours
- Color maps and pseudo-coloring
- Viewpoints and camera control (advanced!)
- Shading and lighting (advanced)
- The following figures demonstrate these concepts,
but you are encouraged to check this out in your
textbook (using Matlabs graphic brings out the
real fun in using this powerful software!).
14Exploring Hidden Line Removal
- This uses an interesting built-in function
sphere( ) - Hidden lines
- ON shows white inside mesh
- OFF shows transparent mesh
X,Y,Z sphere(12) subplot(1,2,1) mesh(X,Y,Z),
title('Figure 26.5a Opaque') hidden on axis
square off subplot(1,2,2) mesh(X,Y,Z),title('Fig
ure 26.5b Transparent') hidden off axis square
off
15Let's Explore the mesh( ) Function
- We'll use peaks( ) to create a zf(x,y) function
that is interesting and shows off the 3D plotting - Note you should check help peaks and help mesh
and also the textbook for further details on
these functions
gtgt x,y,zpeaks(30) gtgt mesh(x,y,z) gtgt axis
tight gtgt xlabel('x-axis') gtgt ylabel('y-axis') gtgt
zlabel('z-axis')
SuggestionTry using hidden off and hidden on to
see what happens.
16Exploring meshc Plots
- meshc( ) adds a contour plot directly below the
mesh - helps visualize the contours
- can locate the peaks and dips
gtgt x,y,zpeaks(30) gtgt meshc(x,y,z) gtgt axis
tight gtgt xlabel('x-axis') gtgt ylabel('y-axis') gtgt
zlabel('z-axis')
HintIf you just finished the previous example,
you need only type in the new meshc( ) command.
17Exploring meshz Plots
- This special variation allows you to emphasize
the zero plane in the mesh plot
gtgt x,y,zpeaks(30) gtgt meshz(x,y,z) gtgt axis
tight gtgt xlabel('x-axis') gtgt ylabel('y-axis') gtgt
zlabel('z-axis')
18Exploring waterfall Plots
- This is another variation on the mesh plot and
can also be useful in some special cases
gtgt x,y,zpeaks(30) gtgt waterfall(x,y,z) gtgt axis
tight gtgt xlabel('x-axis') gtgt ylabel('y-axis') gtgt
zlabel('z-axis')
19Let's Explore the surf( ) Function
- So far we have only been able to plot meshes to
represent the surface - can hide hidden lines to clarify the surface
shape - still appears as a wireframe-like shape
- Matlab provides a function that will fill in the
mesh with facets (surfaces with 3 or 4 corners
but not necessarily plane surfaces) - we'll see that these can produce very realistic
appearing surfaces in 3D - can control appearance of mesh
- can change color mapping to reveal other
information - can add lighting
20Exploring surf Plots (shading faceted)
- The basic function uses the default shading
faceted and this shows the mesh
gtgt x,y,zpeaks(30) gtgt surf(x,y,z) gtgt axis
tight gtgt xlabel('x-axis') gtgt ylabel('y-axis') gtgt
zlabel('z-axis')
21Exploring surf Plots (shading flat)
- shading flat will eliminate the mesh and leave
the facets colored with a constant color value
gtgt x,y,zpeaks(30) gtgt surf(x,y,z) gtgt shading
flat gtgt axis tight gtgt xlabel('x-axis') gtgt
ylabel('y-axis') gtgt zlabel('z-axis')
22Exploring surfc Plots (shading interp)
- surfc acts much like meshc with a contour plot
drawn below the surface - shading interp interpolates color over each facet
gtgt x,y,zpeaks(30) gtgt surfc(x,y,z) gtgt shading
interp gtgt axis tight gtgt xlabel('x-axis') gtgt
ylabel('y-axis') gtgt zlabel('z-axis')
NOTEshading interp can take time to execute and
the figure may cause plotting problems
23Changing the Viewing Direction
- You can change the orientation of the object
- Viewing direction view(az,el) or you can use
the rotate3d button on the view toolbar on the
figure window menu - Camera direction this is best controlled from
the camera toolbar on the figure window menu
z
viewpoint
view(-45,60)
y
elev
x
azimuth
24Adding a Colorbar
- You can use the colorbar command to add a color
bar that defines the color used in the plot. Use
help colorbar to find out what the other options
are
NOTE You should check out the instructions on
how to use the Property Editor and the tools in
the Figure window to interactively add text and
labels to various parts of this 3D graph.
25Using Color as a 4th Dimension
- Matlab associates a colormap with each figure
window - this is a 3 column array in which columns 1-3
control the Red, Blue Green colors (defined
using a 0-1 range) - each row defines a specific color
- colors are limited by the color display
capabilities of the computer - these, along with a few fixed colors, are the
colors Matlab will use in the figure window (each
figure window has its own separate colormap) - Matlab predefines a number of useful colormaps
- JET, HSV, GRAY, HOT, COOL, BONE, COPPER, PINK,
FLAG, PRISM - see help graph3d for more information and other
colormaps - use colormap hsv or colormap(hsv) to change
- colormap default restores the colormap to default
values - use the colorbar command to display the color bar
by itself or alongside a plot (see help)
26Using Color as a 4th Dimension (2)
- Matlab uses pseudo-color to change the color in
a mesh or surf plot - colors can be based on the z values (default)
- you can specify the color variable in mesh() and
surf() - Use caxis(cmin cmax) to define the max and min
values that are mapped to the colormap
gtgt caxis(-5 5) gtgt colorbar
gtgt caxis(-50 50) gtgt colorbar
27Using Color as a 4th Dimension (3)
- mesh() and surf() can accept a "color" argument
that defines the color used over the plaid.
gtgt caxis('auto') gtgt surf(x,y,z,y) gtgt axis
tight gtgt ylabel('y-axis')
gtgt Cdel2(z) compute Laplacian gtgt
surf(x,y,z,C) gtgt axis tight gtgt colorbar
Here we have used the y values as the color
variable.
This shows curvature of the surface as the color
variable.
28Contour Plots
- Matlab provides several functions to draw
contours - contour() draws simple contour map with N
intervals - contourf() draws a contour with filled contours
- contour3() draws a contour map in 3D
x,y,zpeaks(30) contourf(x,y,z,10)
colorbar xlabel('x-axis') ylabel('y-axis')
x,y,zpeaks(30) contour(x,y,z,10)
colorbar xlabel('x-axis') ylabel('y-axis')
NOTE See textbook for other options.
29Example
- Here is a simple example to illustrate 3D
plotting - it is the sinc function (sin(r)/r) where
rradius - we need to add eps to avoid inf when dividing by
zero
xx,yymeshgrid(-4.pipi./54.pi)
Rsqrt(xx.2 yy.2)eps radius
zzsin(R)./R surf(xx,yy,zz) axis tight
Question How could you handle a situation when
the data are not defined on a regular grid (when
the points are unevenly spaced)?
30Incentives
- Here is a sphere with 2 lights added and the
shading adjusted to show the lights (gouraud
shading). See if you can create similar figures!
Now you really don't have any reason why you
can't produce outstanding graphics for all your
reports and projects!
31Problem Solving
- Create a plot of the sinc(R) function shown in a
previous slide, but in this case make the plot
region a circular area in the xy plane that has a
radius of 3p. (Hint you will need to create an
xy plaid but computed from a grid defined using
polar coordinates.) - Add a circular disk of radius 3p to the above
sinc(R) plot. (Hint you can use hold on to add
additional surfaces using the surf command just
like you did for plot() ). - Now add a vertical plane (y0) and a second
vertical plane (x0) to the plot. This
effectively partitions the surface into 8 regions.
32Summary
- Review questions
- Describe 3D plotting in MATLAB,
- What is a scalar function in two variables?
- What is a plaid? What do they look like?
- Describe differences between surface and mesh
plot, and all their variants. - What do the shading, hidden commands do?
- Action Items
- Review the lecture
- Work through the examples
- See if you can figure out how to use color