Matlab 3D Graphics

This is a tutorial on the 3D graphics capabilities in Matlab.

Contents

Create data

We begin by creating some sample 3D data.

x=linspace(-1,1,256); % Create 1D grids.
y=linspace(-2,2,128);
z=linspace(-5,5,384);
[xxx,yyy,zzz]=meshgrid(x,y,z); % Combine to make 3D grid.
myf=sin(pi*xxx.*yyy).*(yyy.^2-3*xxx.*yyy.*zzz);
xg=xxx;
yg=yyy;
zg=zzz;
fg=myf;

Isosurface plot

figure(1)
clf
tic
% isosurface creates a 3D contour at the specified value (in this case 15).
p1=patch(isosurface(xg,yg,zg,fg,15));

Using the "FaceColor" property you can change the color of the contour. These are defined using the RGB values, some common colors are: [0 0 1] Blue [1 0 0] Red [0 1 0] Green [1 1 0] Yellow [1 1 1] White [0 0 0] Black

p1.FaceColor = [0.95 0.05 0.05];

The "EdgeColor" property color sets the color of the edges of the surface. To remove any color from the edges, set this to none.

p1.EdgeColor = 'none';

With the "FaceAlpha" property you can change the opacity of the contour.

p1.FaceAlpha = 0.55;

If you want to keep adding plots to the current figure you need to "hold" the figure.

hold on
p2=patch(isosurface(xg,yg,zg,fg,5));
p2.FaceColor = [0.55 0.55 0.95];
p2.EdgeColor = 'none';
p2.FaceAlpha = 0.75;

The view command changes the angle of the viewpoint for your figure. The first number is the azimuthal angle in degrees away from the negative y axis, and the second number is the angle of elevation away from the xy-plane. To see a diagram showing the angles go to: https://www.mathworks.com/help/matlab/ref/view.html?searchHighlight=view&s_tid=doc_srchtitle.

view([120 30])
grid on

With 3D graphics you can control the "light" which creates shadows to create a more "realistic" figure. The "camlight" function specifies a light in the camera "view" coordinates (azimuthal and elevation). Every invocation will create a new light.

camlight(-45,0.1)
camlight(45,30)

Since the x, y, and z grids are different lengths we can use the "daspect" command to change their aspect ratio so that the axes appear to be equal lengths.

daspect([1 2 5])
toc
Elapsed time is 6.048523 seconds.

Changing the viewer size

If we wanted to make all the axis lengths appear their actual sizes you change the daspect to [1 1 1].

figure(2)
clf
tic
p1=patch(isosurface(xg,yg,zg,fg,15));
p1.FaceColor = [0.95 0.05 0.05];
p1.EdgeColor = 'none';
p1.FaceAlpha = 0.55;
hold on
p2=patch(isosurface(xg,yg,zg,fg,5));
p2.FaceColor = [0.55 0.55 0.95];
p2.EdgeColor = 'none';
p2.FaceAlpha = 0.75;
view([120 30])
grid on
camlight(-45,0.1)
camlight(45,30)
daspect([1 1 1])

Where the daspect([1 1 1]) specifies that all axis should be the same size.

Notes

Some other plotting functions which work in 3D are: surf quiver streamline To see the full selection of functions please go to: https://www.mathworks.com/help/matlab/2-and-3d-plots.html