本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

surf

曲面图

说明

示例

surf(X,Y,Z) 创建一个三维曲面图。该函数将矩阵 Z 中的值绘制为由 XY 定义的 x-y 平面中的网格上方的高度。函数还对颜色数据使用 Z,因此颜色与高度成比例。

示例

此外,surf(X,Y,Z,C) 还指定曲面的颜色。

surf(Z) 创建曲面,并将 Z 中元素的列索引和行索引分别用作 x 坐标和 y 坐标。

此外,surf(Z,C) 还指定曲面的颜色。

surf(ax,___) 将图形绘制到 ax 指定的坐标区中,而不是当前坐标区中。指定坐标区作为第一个输入参数。

示例

surf(___,Name,Value) 使用一个或多个名称-值对组参数指定曲面属性。例如,'FaceAlpha',0.5 创建半透明曲面。请在所有其他输入参数之后指定名称-值对组。

示例

s = surf(___) 将返回一个图曲面对象。在创建曲面之后可使用 s 对其进行修改。有关列表,请参阅 Surface 属性

示例

全部折叠

创建大小相同的 XYZ 矩阵。然后将数据绘制为曲面。该曲面对高度和颜色数据均使用 Z

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
surf(X,Y,Z)

通过包含第四个矩阵输入 C 来指定曲面图的颜色。通过将 C 指定为与 Z 具有相同大小的矩阵来使用颜色图颜色。向图中添加颜色栏以显示 C 中的数据值如何映射到颜色图中的颜色。

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
C = X.*Y;
surf(X,Y,Z,C)
colorbar

通过包含第四个矩阵输入 CO 来指定曲面图的颜色。通过将 CO 创建为 RGB 三元组值的 m×n×3 数组来使用真彩色,其中 Z 是 m×n。数组的第一页指示每种颜色的红色分量;第二页指示绿色分量;第三页指示蓝色分量。

[X,Y,Z] = peaks(25);
CO(:,:,1) = zeros(25); % red
CO(:,:,2) = ones(25).*linspace(0.5,0.6,25); % green
CO(:,:,3) = ones(25).*linspace(0,1,25); % blue
surf(X,Y,Z,CO)

通过将 FaceAlpha 属性设置为名称-值对组参数来创建半透明曲面。将曲面对象赋给变量 s

[X,Y] = meshgrid(-5:.5:5);
Z = Y.*sin(X) - X.*cos(Y);
s = surf(X,Y,Z,'FaceAlpha',0.5)

s = 
  Surface with properties:

       EdgeColor: [0 0 0]
       LineStyle: '-'
       FaceColor: 'flat'
    FaceLighting: 'flat'
       FaceAlpha: 0.5000
           XData: [21x21 double]
           YData: [21x21 double]
           ZData: [21x21 double]
           CData: [21x21 double]

  Show all properties

在创建曲面对象之后可使用 s 访问并修改其属性。例如,设置 EdgeColor 属性以关闭边缘的显示。

s.EdgeColor = 'none';

输入参数

全部折叠

x 坐标,指定为大小与 Z 相同的矩阵或长度为 n 的向量,其中 [m,n] = size(Z)。要创建任意域的矩阵,请使用 meshgrid 函数。

曲面对象的 XData 属性存储 x 值。

示例: [X,Y] = meshgrid(-5:0.5:5)

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical | datetime | duration

y 坐标,指定为大小与 Z 相同的矩阵或长度为 m 的向量,其中 [m,n] = size(Z)。要创建任意域的矩阵,请使用 meshgrid 函数。

曲面对象的 YData 属性存储 y 值。

示例: [X,Y] = meshgrid(-5:0.5:5)

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical | datetime | duration

z 坐标,指定为矩阵。如果未指定颜色,则 Z 还会设置曲面颜色。

曲面对象的 ZData 属性存储 z 值。

示例: Z = [1 2 3; 4 5 6]

示例: Z = sin(x) + cos(y)

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | categorical | datetime | duration

每个顶点的颜色,指定为大小与 Z 相同的矩阵,或指定为 RGB 三元组的 m×n×3 数组,其中 Zm×n

  • 如果要使用颜色图颜色,则将 C 指定为矩阵。曲面对象的 CDataMapping 属性控制 C 中的值如何映射到颜色图中的颜色。

  • 如果要使用真彩色,请将 C 指定为 RGB 三元组的数组。

曲面对象的 CData 属性存储颜色数据。如果要对曲面着色进行更多控制,请使用 FaceColorEdgeColor 属性。

要在其中绘图的坐标区,指定为坐标区对象。如果未指定坐标区,则 surf 在当前坐标区中绘图。

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: surf(X,Y,Z,'FaceAlpha',0.5,'EdgeColor','none') 创建一个半透明曲面,并且不绘制边缘。

注意

此处所列的属性只是一部分。有关完整列表,请参阅 Surface 属性

边线颜色,指定为下面列出的值之一。默认颜色 [0 0 0] 对应于黑边。

说明
'none'不绘制边。
'flat'

根据 CData 属性中的值,对每个边使用不同的颜色。首先您必须将 CData 属性指定为矩阵,大小与 ZData 相同。每个面(正的 x 和 y 方向)的第一个顶点处的颜色值确定相邻边的颜色。当 EdgeAlpha 属性设置为 'interp' 时,不能使用此值。

'interp'

根据 CData 属性中的值,对每个边使用插值颜色。首先您必须将 CData 属性指定为矩阵,大小与 ZData 相同。通过对各顶点处颜色值进行线性插值,可使颜色在每条边上有所变化。当 EdgeAlpha 属性设置为 'flat' 时,不能使用此值。

RGB 三元组、十六进制颜色代码或颜色名称

对所有边使用指定的颜色。此选项不会使用 CData 属性中的颜色值。

RGB 三元组和十六进制颜色代码对于指定自定义颜色非常有用。

  • RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]

  • 十六进制颜色代码是字符向量或字符串标量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0F。这些值不区分大小写。因此,颜色代码 '#FF8800''#ff8800''#F80''#f80' 是等效的。

此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

以下是 MATLAB® 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。

RGB 三元组十六进制颜色代码外观
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

线型,指定为下表中列出的选项之一。

线型说明表示的线条
'-'实线

'--'虚线

':'点线

'-.'点划线

'none'无线条无线条

面颜色,指定为下表中的值之一。

说明
'flat'

根据 CData 属性中的值,对每个面使用不同的颜色。首先您必须将 CData 属性指定为矩阵,大小与 ZData 相同。每个面的第一个顶点(正 x 和 y 方向)的颜色值决定整个面的颜色。当 FaceAlpha 属性设置为 'interp' 时,不能使用此值。

'interp'

根据 CData 属性中的值,对每个面使用插补着色。首先您必须将 CData 属性指定为矩阵,大小与 ZData 相同。通过对各顶点处颜色值进行插值,可使颜色在每个面上有所变化。当 FaceAlpha 属性设置为 'flat' 时,不能使用此值。

RGB 三元组、十六进制颜色代码或颜色名称

对所有面使用指定的颜色。此选项不会使用 CData 属性中的颜色值。

'texturemap'变换 CData 中的颜色数据,以便其符合曲面。
'none'不绘制面。

RGB 三元组和十六进制颜色代码对于指定自定义颜色非常有用。

  • RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]

  • 十六进制颜色代码是字符向量或字符串标量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0F。这些值不区分大小写。因此,颜色代码 '#FF8800''#ff8800''#F80''#f80' 是等效的。

此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

以下是 MATLAB 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。

RGB 三元组十六进制颜色代码外观
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

面透明度,指定为下列值之一:

  • 范围 [0,1] 中的标量 - 在所有面上使用统一的透明度。值为 1 时完全不透明,值为 0 时完全透明。介于 01 之间的值表示半透明。此选项不会使用 AlphaData 属性中的透明度值。

  • 'flat' - 根据 AlphaData 属性中的值,对每个面使用不同的透明度。第一个顶点的透明度值确定整个面的透明度。首先您必须将 AlphaData 属性指定为矩阵,大小与 ZData 属性相同。FaceColor 属性也必须设置为 'flat'

  • 'interp' - 根据 AlphaData 属性中的值,对每个面使用插值透明度。通过对各顶点处透明度数值进行插值,每个面上的透明度会有所变化。首先您必须将 AlphaData 属性指定为矩阵,大小与 ZData 属性相同。FaceColor 属性也必须设置为 'interp'

  • 'texturemap' - 变换 AlphaData 中的数据,以便其符合曲面。

光源对象对面的影响,指定为下列值之一:

  • 'flat' - 将光源均匀地应用于每个面上。使用此值可查看分面着色对象。

  • 'gouraud' - 改变各个面的光源。计算顶点处的光源,然后以线性插值方式将光源应用于各个面中。使用此值可查看曲面。

  • 'none' - 不将来自光源对象的光源应用于各个面。

要向坐标区中添加光对象,请使用 light 函数。

注意

'phong' 值已被删除。请改用 'gouraud'

扩展功能

在 R2006a 之前推出