This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

fsurf

Plot 3-D surface

Syntax

fsurf(f)
fsurf(f,[min max])
fsurf(f,[xmin xmax ymin ymax])
fsurf(funx,funy,funz)
fsurf(funx,funy,funz,[uvmin uvmax])
fsurf(funx,funy,funz,[umin umax vmin vmax])
fsurf(___,LineSpec)
fsurf(___,Name,Value)
fsurf(ax,___)
fs = fsurf(___)

Description

example

fsurf(f) creates a surface plot of the symbolic expression f(x,y) over the default interval [-5 5] for x and y.

example

fsurf(f,[min max]) plots f(x,y) over the interval [min max] for x and y.

example

fsurf(f,[xmin xmax ymin ymax]) plots f(x,y) over the interval [xmin xmax] for x and [ymin ymax] for y.

example

fsurf(funx,funy,funz) plots the parametric surface x = x(u,v), y = y(u,v), z = z(u,v) over the interval [-5 5] for u and v.

fsurf(funx,funy,funz,[uvmin uvmax]) plots the parametric surface x = x(u,v), y = y(u,v), z = z(u,v) over the interval [uvmin uvmax] for u and v.

example

fsurf(funx,funy,funz,[umin umax vmin vmax]) plots the parametric surface x = x(u,v), y = y(u,v), z = z(u,v) over the interval [umin umax] for u and [vmin vmax] for v.

example

fsurf(___,LineSpec) uses LineSpec to set the line style, marker symbol, and face color.

example

fsurf(___,Name,Value) specifies line properties using one or more Name,Value pair arguments. Use this option with any of the input argument combinations in the previous syntaxes.

fsurf(ax,___) plots into the axes with the object ax instead of the current axes object gca.

example

fs = fsurf(___) returns a function surface object or parameterized function surface object, depending on the type of surface. Use the object to query and modify properties of a specific surface. For details, see FunctionSurface Properties and ParameterizedFunctionSurface Properties.

Examples

3-D Surface Plot of Symbolic Expression

Plot the input over the default range and .

syms x y
fsurf(sin(x)+cos(y))

3-D Surface Plot of Symbolic Function

Plot the real part of over the default range and .

syms f(x,y)
f(x,y) = real(atan(x + i*y));
fsurf(f)

Specify Plotting Interval of Surface Plot

Plot over and by specifying the plotting interval as the second argument of fsurf.

syms x y
f = sin(x) + cos(y);
fsurf(f, [-pi pi -5 5])

Parameterized Surface Plot

Plot the parameterized surface

for and .

Improve the plot's appearance by using camlight.

syms s t
r = 2 + sin(7*s + 5*t);
x = r*cos(s)*sin(t);
y = r*sin(s)*sin(t);
z = r*cos(t);
fsurf(x, y, z, [0 2*pi 0 pi])
camlight
view(46,52)

Add Title and Axis Labels and Format Ticks

For and from to , plot the 3-D surface . Add a title and axis labels.

Create the x-axis ticks by spanning the x-axis limits at intervals of pi/2. Convert the axis limits to precise multiples of pi/2 by using round and get the symbolic tick values in S. Display these ticks by using the XTick property. Create x-axis labels by using arrayfun to apply texlabel to S. Display these labels by using the XTickLabel property. Repeat these steps for the y-axis.

To use LaTeX in plots, see latex.

syms x y
fsurf(y.*sin(x)-x.*cos(y), [-2*pi 2*pi])
title('ysin(x) - xcos(y) for x and y in [-2\pi,2\pi]')
xlabel('x')
ylabel('y')
zlabel('z')

ax = gca;
S = sym(ax.XLim(1):pi/2:ax.XLim(2));
S = sym(round(vpa(S/pi*2))*pi/2);
ax.XTick = double(S);
ax.XTickLabel = arrayfun(@texlabel,S,'UniformOutput',false);

S = sym(ax.YLim(1):pi/2:ax.YLim(2));
S = sym(round(vpa(S/pi*2))*pi/2);
ax.YTick = double(S);
ax.YTickLabel = arrayfun(@texlabel,S,'UniformOutput',false);

Line Style and Width for Surface Plot

Plot the parametric surface , , with different line styles for different values of . For , use a dashed line with green dot markers. For , use a LineWidth of 1 and a green face color. For , turn off the lines by setting EdgeColor to none.

syms s t
fsurf(s*sin(t),-s*cos(t),t,[-5 5 -5 -2],'--.','MarkerEdgeColor','g')
hold on
fsurf(s*sin(t),-s*cos(t),t,[-5 5 -2 2],'LineWidth',1,'FaceColor','g')
fsurf(s*sin(t),-s*cos(t),t,[-5 5 2 5],'EdgeColor','none')

Modify Surface After Creation

Plot the parametric surface

Specify an output to make fcontour return the plot object.

syms u v
x = exp(-abs(u)/10).*sin(5*abs(v));
y = exp(-abs(u)/10).*cos(5*abs(v));
z = u;
fs = fsurf(x,y,z)

fs = 
  ParameterizedFunctionSurface with properties:

    XFunction: [1x1 sym]
    YFunction: [1x1 sym]
    ZFunction: [1x1 sym]
    EdgeColor: [0 0 0]
    LineStyle: '-'
    FaceColor: 'interp'

  Show all properties

Change the range of u to [-30 30] by using the URange property of fs. Set the line color to blue by using the EdgeColor property and specify white, dot markers by using the Marker and MarkerEdgeColor properties.

fs.URange = [-30 30];
fs.EdgeColor = 'b';
fs.Marker = '.';
fs.MarkerEdgeColor = 'w';

Multiple Surface Plots and Transparent Surfaces

Plot multiple surfaces using vector input to fsurf. Alternatively, use hold on to plot successively on the same figure. When displaying multiple surfaces on the same figure, transparency is useful. Adjust the transparency of surface plots by using the FaceAlpha property. FaceAlpha varies from 0 to 1, where 0 is full transparency and 1 is no transparency.

Plot the planes and using vector input to fsurf. Show both planes by making them half transparent using FaceAlpha.

syms x y
h = fsurf([x+y x-y]);
h(1).FaceAlpha = 0.5;
h(2).FaceAlpha = 0.5;
title('Planes (x+y) and (x-y) at half transparency')

Control Resolution of Surface Plot

Control the resolution of a surface plot using the 'MeshDensity' option. Increasing 'MeshDensity' can make smoother, more accurate plots while decreasing it can increase plotting speed.

Divide a figure into two using subplot. In the first subplot, plot the parametric surface , , and . The surface has a large gap. Fix this issue by increasing the 'MeshDensity' to 40 in the second subplot. fsurf fills the gap showing that by increasing 'MeshDensity' you increased the plot's resolution.

syms s t

subplot(2,1,1)
fsurf(sin(s), cos(s), t/10.*sin(1./s))
view(-172,25)
title('Default MeshDensity = 35')

subplot(2,1,2)
fsurf(sin(s), cos(s), t/10.*sin(1./s),'MeshDensity',40)
view(-172,25)
title('Increased MeshDensity = 40')

Show Contours Below Surface Plot

Show contours for the surface plot of the expression f by setting the 'ShowContours' option to 'on'.

syms x y
f = 3*(1-x)^2*exp(-(x^2)-(y+1)^2)...
- 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2)...
- 1/3*exp(-(x+1)^2 - y^2);
fsurf(f,[-3 3],'ShowContours','on')

Create Animations of Surface Plots

Create animations by changing the displayed expression using the Function, XFunction, YFunction, and ZFunction properties and then by using drawnow to update the plot. To export to GIF, see imwrite.

By varying the variable i from 1 to 3, animate the parametric surface

x=tsin(s)y=cos(s)z=sin(is).

for -0.1 < u < 0.1 and 0 < v < 1. Increase plotting speed by reducing MeshDensity to 9.

syms s t
h = fsurf(t.*sin(s), cos(s), sin(1./s), [-0.1 0.1 0 1]);
h.MeshDensity = 9;
for i=1:0.05:3
    h.ZFunction = sin(i./s);
    drawnow
end

Improve Appearance of Surface Plot

Create a symbolic expression f for the function

Plot the expression f as a surface. Improve the appearance of the surface plot by using the properties of the handle returned by fsurf, the lighting properties, and the colormap.

Create a light by using camlight. Increase brightness by using brighten. Remove the lines by setting EdgeColor to 'none'. Increase the ambient light using AmbientStrength. For details, see Lighting, Transparency, and Shading (MATLAB). Turn the axes box on. For the title, convert f to LaTeX using latex. Finally, to improve the appearance of the axes ticks, axes labels, and title, set 'Interpreter' to 'latex'.

syms x y
f = 3*(1-x)^2*exp(-(x^2)-(y+1)^2)... 
   - 10*(x/5 - x^3 - y^5)*exp(-x^2-y^2)... 
   - 1/3*exp(-(x+1)^2 - y^2);
h = fsurf(f,[-3 3]);

camlight(110,70)
brighten(0.6)
h.EdgeColor = 'none';
h.AmbientStrength = 0.4;

a = gca;
a.TickLabelInterpreter = 'latex';
a.Box = 'on';
a.BoxStyle = 'full';

xlabel('$x$','Interpreter','latex')
ylabel('$y$','Interpreter','latex')
zlabel('$z$','Interpreter','latex')
title_latex = ['$' latex(f) '$'];
title(title_latex,'Interpreter','latex')

Input Arguments

collapse all

Expression or function to be plotted, specified as a symbolic expression or function.

Plotting interval for x- and y-axes, specified as a vector of two numbers. The default is [-5 5].

Plotting interval for x- and y-axes, specified as a vector of four numbers. The default is [-5 5 -5 5].

Parametric functions of u and v, specified as a symbolic expression or function.

Plotting interval for u and v axes, specified as a vector of two numbers. The default is [-5 5].

Plotting interval for u and v, specified as a vector of four numbers. The default is [-5 5 -5 5].

Axes object. If you do not specify an axes object, then fsurf uses the current axes.

Line style, marker symbol, and color, specified as a character vector. The elements of the character vector can appear in any order, and you can omit one or more options from the character vector specifier.

Example: '--or' is a red surface with circle markers and dashed lines

SpecifierLine Style
-Solid line (default)
--Dashed line
:Dotted line
-.Dash-dot line
SpecifierMarker
oCircle
+Plus sign
*Asterisk
.Point
xCross
sSquare
dDiamond
^Upward-pointing triangle
vDownward-pointing triangle
>Right-pointing triangle
<Left-pointing triangle
pPentagram
hHexagram
SpecifierColor

y

yellow

m

magenta

c

cyan

r

red

g

green

b

blue

w

white

k

black

Name-Value Pair Arguments

Specify optional comma-separated pairs of Name,Value arguments. Name is the argument name and Value is the corresponding value. Name must appear inside quotes. You can specify several name and value pair arguments in any order as Name1,Value1,...,NameN,ValueN.

Example: 'Marker','o','MarkerFaceColor','red'

The properties listed here are only a subset. For a complete list, see FunctionSurface Properties.

Number of evaluation points per direction, specified as a number. The default is 35. Because fsurf objects use adaptive evaluation, the actual number of evaluation points is greater.

Example: 100

Display contour plot under plot, specified as 'off' (default) or 'on'.

Line color, specified as 'interp', an RGB triplet, or one of the color options listed in the table. The default RGB triplet value of [0 0 0] corresponds to black. The 'interp' value colors the edges based on the ZData values.

For a custom color, specify an RGB triplet. An RGB triplet is a three-element row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range [0,1]; for example, [0.4 0.6 0.7]. Alternatively, you can specify some common colors by name. This table lists the long and short color name options and the equivalent RGB triplet values.

OptionDescriptionEquivalent RGB Triplet
'red' or 'r'Red[1 0 0]
'green' or 'g'Green[0 1 0]
'blue' or 'b'Blue[0 0 1]
'yellow' or 'y'Yellow[1 1 0]
'magenta' or 'm'Magenta[1 0 1]
'cyan' or 'c'Cyan[0 1 1]
'white' or 'w'White[1 1 1]
'black' or 'k'Black[0 0 0]
'none'No colorNot applicable

Line style, specified as one of the options listed in this table.

Line StyleDescriptionResulting Line
'-'Solid line

'--'Dashed line

':'Dotted line

'-.'Dash-dotted line

'none'No lineNo line

Line width, specified as a positive value in points. If the line has markers, then the line width also affects the marker edges.

Example: 0.75

Marker symbol, specified as one of the values in this table. By default, a line does not have markers. Add markers at selected points along the line by specifying a marker.

ValueDescription
'o'Circle
'+'Plus sign
'*'Asterisk
'.'Point
'x'Cross
'square' or 's'Square
'diamond' or 'd'Diamond
'^'Upward-pointing triangle
'v'Downward-pointing triangle
'>'Right-pointing triangle
'<'Left-pointing triangle
'pentagram' or 'p'Five-pointed star (pentagram)
'hexagram' or 'h'Six-pointed star (hexagram)
'none'No markers

Marker outline color, specified as 'auto', an RGB triplet, or one of the color options listed in the table. The default value of 'auto' uses the same color as the EdgeColor property.

For a custom color, specify an RGB triplet. An RGB triplet is a three-element row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range [0,1]; for example, [0.4 0.6 0.7]. Alternatively, you can specify some common colors by name. This table lists the long and short color name options and the equivalent RGB triplet values.

OptionDescriptionEquivalent RGB Triplet
'red' or 'r'Red[1 0 0]
'green' or 'g'Green[0 1 0]
'blue' or 'b'Blue[0 0 1]
'yellow' or 'y'Yellow[1 1 0]
'magenta' or 'm'Magenta[1 0 1]
'cyan' or 'c'Cyan[0 1 1]
'white' or 'w'White[1 1 1]
'black' or 'k'Black[0 0 0]
'none'No colorNot applicable

Example: [0.5 0.5 0.5]

Example: 'blue'

Marker fill color, specified as 'auto', an RGB triplet, or one of the color options listed in the table. The 'auto' value uses the same color as the MarkerEdgeColor property.

For a custom color, specify an RGB triplet. An RGB triplet is a three-element row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range [0,1]; for example, [0.4 0.6 0.7]. Alternatively, you can specify some common colors by name. This table lists the long and short color name options and the equivalent RGB triplet values.

OptionDescriptionEquivalent RGB Triplet
'red' or 'r'Red[1 0 0]
'green' or 'g'Green[0 1 0]
'blue' or 'b'Blue[0 0 1]
'yellow' or 'y'Yellow[1 1 0]
'magenta' or 'm'Magenta[1 0 1]
'cyan' or 'c'Cyan[0 1 1]
'white' or 'w'White[1 1 1]
'black' or 'k'Black[0 0 0]
'none'No colorNot applicable

Example: [0.3 0.2 0.1]

Example: 'green'

Marker size, specified as a positive value in points.

Example: 10

Output Arguments

collapse all

One or more objects, returned as a scalar or a vector. The object is either a function surface object or parameterized surface object, depending on the type of plot. You can use these objects to query and modify properties of a specific line. For details, see FunctionSurface Properties and ParameterizedFunctionSurface Properties.

Introduced in R2016a