Main Content

patch

创建彩色多边形的补片

说明

示例

patch(X,Y,C) 通过将 XY 指定为每个顶点的坐标来创建一个或多个彩色多边形补片。patch 按您指定顶点的顺序连接这些顶点。要创建一个补片,请将 XY 指定为向量。要创建多个多边形,请将 XY 指定为矩阵,其中每一列对应于一个不同多边形。C 决定补片颜色。

patch(X,Y,Z,C) 使用 XYZ 在三维坐标中创建多边形。要在三维视图中查看这些多边形,请使用 view(3) 命令。C 确定颜色。

patch('XData',X,'YData',Y) 类似于 patch(X,Y,C),不同之处在于您不需要为二维坐标指定颜色数据。

patch('XData',X,'YData',Y,'ZData',Z) 类似于 patch(X,Y,Z,C),不同之处在于您不需要指定颜色数据。

注意

当使用 'XData''YData''ZData' 名称-值参量指定数据时,数据必须为数值类型,如 doublesingle 或整数类型。要指定 categoricaldatetimeduration 数据,请使用 XYZ 参量。

示例

patch('Faces',F,'Vertices',V) 创建一个或多个多边形,其中 V 指定顶点的值,F 定义要连接的顶点。当有多个多边形时,仅指定唯一顶点及其连接矩阵可以减小数据大小。为 V 中的每个行指定一个顶点。要创建一个多边形,请将 F 指定为向量。要创建多个多边形,请将 F 指定为矩阵,其中一行对应于一个多边形。不要求每个面都具有相同的顶点数。要指定不同数量的顶点,请以 NaN 值填充 F

示例

patch(S) 使用结构体 S 创建一个或多个多边形。结构体字段名称是补片属性名称,字段值是属性值。例如,S 可以包含字段 FacesVertices

示例

patch(___,Name,Value) 创建多边形,并使用名称-值对组参量指定一个或多个补片属性。补片是包含所有已创建多边形的数据的对象。您可以使用上述语法中的任意输入参量组合指定补片属性。例如,'LineWidth',2 将所有多边形的轮廓宽度设置为 2 磅。

patch(ax,___) 将在由 ax 指定的坐标区中,而不是当前坐标区 (gca) 中绘制补片。选项 ax 可以位于上述语法中的任何输入参量组合之前。

p = patch(___) 返回包含所有多边形的数据的补片对象。使用 p 可在创建补片对象后查询并修改其属性。有关属性和描述的列表,请参阅 Patch 属性

示例

全部折叠

通过指定每个顶点的 (x,y) 坐标创建一个多边形。然后,继续将两个多边形添加到图窗中。

创建一个红色正方形,顶点位于 (0,0)(1,0)(1,1)(0,1)。将 x 指定为顶点的 x 坐标,并将 y 指定为 y 坐标。patch 会自动将最后一个 (x,y) 坐标与第一个 (x,y) 坐标连接。

x = [0 1 1 0];
y = [0 0 1 1];
patch(x,y,'red')

通过将 xy 指定为两列矩阵,创建两个多边形。每一列定义其中一个多边形的坐标。patch 将这些多边形添加到当前坐标区中,而不清除坐标区。

x2 = [2 5; 2 5; 8 8];
y2 = [4 0; 8 2; 4 0];
patch(x2,y2,'green')

X 定义为分类值向量,将 Y 定义为持续时间值向量。patch 函数使用经过排序的类别列表,因此 x 轴显示它们的顺序可能与您预期的有所不同。要指定顺序,请调用 reordercats 函数。然后,创建一个红色补片来可视化数据。

X = categorical({'Freezing','Cold','Warm','Hot','Boiling','Boiling','Freezing'});
X = reordercats(X,{'Freezing','Cold','Warm','Hot','Boiling'});
Y = minutes([0 15 20 47 50 0 0]);
patch(X,Y,'red')

通过指定每个唯一顶点的坐标和定义如何连接这些顶点的矩阵,创建一个多边形。然后,继续将两个多边形添加到图窗中。

创建一个红色正方形,四个角分别位于 (0,0)(1,0)(1,1)(0,1)。指定 v 以使每行定义一个顶点的 (x,y) 坐标。然后,将 f 指定为要连接的顶点。通过指定 FaceColor 属性来设置颜色。

v = [0 0; 1 0; 1 1; 0 1];
f = [1 2 3 4];
patch('Faces',f,'Vertices',v,'FaceColor','red')

通过将 f 指定为两行矩阵来创建两个多边形。每一行定义一个补片的面。

v2 = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
f2 = [1 2 3; 
    4 5 6];
patch('Faces',f2,'Vertices',v2,'FaceColor','green')

创建两个多边形,并为每个多边形面使用不同颜色。使用颜色栏以显示颜色映射到颜色图的方式。

使用矩阵 xy 创建多边形。将 c 指定为一个具有两个元素的列向量(因为有两个多边形面),并添加颜色栏。

x = [2 5; 2 5; 8 8];
y = [4 0; 8 2; 4 0];
c = [0; 1];
figure
patch(x,y,c)
colorbar

您也可以使用 fv 得到相同的结果。当您创建多边形时,将 FaceVertexCData 设置为一个具有两个元素的列向量(因为有两个多边形面)。将 FaceColor 设置为 'flat'

v = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
f = [1 2 3; 4 5 6];
col = [0; 1];
figure
patch('Faces',f,'Vertices',v,'FaceVertexCData',col,'FaceColor','flat');
colorbar

通过在每个多边形顶点上指定一种颜色在不同多边形面上进行颜色插值,并使用颜色栏显示颜色映射到颜色图的方式。

使用矩阵 xy 创建多边形。将 c 指定为一个矩阵,其大小与为每个顶点定义一种颜色的 xy 相同,再添加一个颜色栏。

x = [2 5; 2 5; 8 8];
y = [4 0; 8 2; 4 0];
c = [0 3; 6 4; 4 6];
figure
patch(x,y,c)
colorbar

您也可以使用 fv 得到相同的结果。当您创建多边形时,将 FaceVertexCData 设置为一个列向量,每个顶点对应一个值,并将 FaceColor 设置为 'interp'

v = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
f = [1 2 3; 4 5 6];
col = [0; 6; 4; 3; 4; 6];
figure
patch('Faces',f,'Vertices',v,'FaceVertexCData',col,'FaceColor','interp');
colorbar

创建一个具有绿色边的多边形,且不显示面。然后,创建第二个多边形,其中每个边具有不同颜色。

v = [0 0; 1 0; 1 1];
f = [1 2 3];
figure
patch('Faces',f,'Vertices',v,...
    'EdgeColor','green','FaceColor','none','LineWidth',2);

通过为每个顶点指定一种颜色并将 EdgeColor 设置为 'flat',对每条边使用不同颜色。

v = [2 0; 3 0; 3 1];
f = [1 2 3];
c = [1 0 0; % red
    0 1 0; % green
    0 0 1]; % blue
patch('Faces',f,'Vertices',v,'FaceVertexCData',c,...
    'EdgeColor','flat','FaceColor','none','LineWidth',2);

使用一个结构体创建两个多边形。首先,创建一个结构体,其中的字段名称与补片属性名称相匹配。然后,使用该结构体创建多边形。

clear S
S.Vertices = [2 4; 2 8; 8 4; 5 0; 5 2; 8 0];
S.Faces = [1 2 3; 4 5 6];
S.FaceVertexCData = [0; 1];
S.FaceColor = 'flat';
S.EdgeColor = 'red';
S.LineWidth = 2;
figure
patch(S)

通过将 FaceAlpha 属性设置为 01 之间的值,创建两个半透明的多边形。

v1 = [2 4; 2 8; 8 4];
f1 = [1 2 3];
figure
patch('Faces',f1,'Vertices',v1,'FaceColor','red','FaceAlpha',.3);

v2 = [2 4; 2 8; 8 8];
f2 = [1 2 3];
patch('Faces',f2,'Vertices',v2,'FaceColor','blue','FaceAlpha',.5);

创建一个多种颜色的线条,其中每个顶点上都有标记。插入颜色,并使用颜色栏显示值映射到颜色图的方式。

创建数据。将 y 的最后一项设置为 NaN,使 patch 创建一个线条,而非一个闭合多边形。使用 y 值为每个顶点定义一种颜色。c 中的值映射到颜色图中的颜色。

x = linspace(1,10,15);
y = sin(x);
y(end) = NaN;
c = y;

创建线条。在每个顶点上显示标记,并将 EdgeColor 设置为 'interp' 以在顶点之间进行颜色插值。添加颜色栏。

figure
patch(x,y,c,'EdgeColor','interp','Marker','o','MarkerFaceColor','flat');
colorbar;

输入参数

全部折叠

顶点的 x 坐标,指定为下列形式之一:

  • 向量 - 创建一个多边形。

  • 矩阵 - 创建 n 个多边形,每个多边形包含 m 个顶点,其中 [m,n] = size(X)。矩阵中的每一列对应于一个多边形。

如果数据未定义闭合的多边形,则 patch 将使多边形闭合。如果单个多边形的各条边彼此相交,则生成的多边形可能会得到部分填充。在这种情况下,最好是将补片对象划分成若干个较小的多边形。

如果您指定 Xpatch 函数会将补片对象的 XData 属性设置为相同的值。补片对象会自动计算面和顶点的数据,并将 FacesVertices 属性设置为适当的值。

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

顶点的 y 坐标,指定为下列形式之一:

  • 向量 - 创建一个多边形。

  • 矩阵 - 创建 n 个多边形,每个多边形包含 m 个顶点,其中 [m,n] = size(Y)。矩阵中的每一列对应于一个多边形。

如果数据未定义闭合的多边形,则 patch 将使多边形闭合。如果单个多边形的各条边彼此相交,则生成的多边形可能会得到部分填充。在这种情况下,最好是将补片对象划分成若干个较小的多边形。

如果您指定 Ypatch 函数会将补片对象的 YData 属性设置为相同的值。补片对象会自动计算面和顶点的数据,并将 FacesVertices 属性设置为适当的值。

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

顶点的 z 坐标,指定为下列形式之一:

  • 向量 - 创建一个多边形。

  • 矩阵 - 创建 m 个多边形,每个多边形包含 n 个顶点,其中 [m,n] = size(Z)。矩阵中的每一列对应于一个多边形。

如果您指定 Zpatch 函数会将补片对象的 ZData 属性设置为相同的值。补片对象会自动计算面和顶点的数据,并将 FacesVertices 属性设置为适当的值。

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

多边形的颜色,指定为标量、向量、矩阵或颜色名称。输入的格式确定所有多边形是具有相同的颜色、每个面一种颜色还是使用插补面颜色。

所需的效果使用以下格式之一:结果
所有面一种颜色

  • 颜色名称,例如,'r' 表示红色。

  • RGB 三元组,例如,[0 .5 .5]

  • 标量值,例如,2CDataMapping 属性确定值映射到颜色图的方式。

有关示例,请参阅 指定坐标

Patch consisting of two red triangular faces

每个面一种颜色

  • 颜色图颜色的 n×1 向量,其中 n 是面数。CDataMapping 属性确定值映射到颜色图的方式。

  • RGB 值的 n×1×3 数组。该数组的第一页定义颜色的红色分量、第二页定义蓝色分量,第三页定义绿色分量。

有关示例,请参阅 不同多边形面颜色

Patch consisting of one blue and one yellow triangular face

对面进行插补着色

  • 颜色图值的 m×n 矩阵,其中 [m,n] = size(X)。为每个顶点指定一种颜色。

  • RGB 值的 m×n×3 数组。

有关示例,请参阅 插入的多边形面颜色

Patch consisting of two triangular faces. Each face is filled with a gradient of interpolated colors

RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]。此外,还可以按名称指定一些常见的颜色。下表列出长和短颜色名称选项以及对应的 RGB 三元组值。

选项描述对应的 RGB 三元组
'red''r'红色[1 0 0]
'green''g'绿色[0 1 0]
'blue''b'蓝色[0 0 1]
'yellow''y'黄色[1 1 0]
'magenta''m'品红色[1 0 1]
'cyan''c'青蓝色[0 1 1]
'white''w'白色[1 1 1]
'black''k'黑色[0 0 0]

多边形顶点,指定为下列形式之一:

  • 两列矩阵 - 每一行包含一个顶点的 (x,y) 坐标。

  • 三列矩阵 - 每一行包含一个顶点的 (x,y,Z) 坐标。

仅指定唯一顶点。当在 F 中定义面定义时,您可以多次引用一个顶点。

如果您指定 Vpatch 函数会将补片对象的 Vertices 属性设置为相同的值。补片对象会自动计算坐标数据,并将 XDataYDataZData 设置为适当的值。

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

面定义,指定为下列形式之一:

  • 行向量 - 创建一个多边形。

  • 矩阵 - 创建多个多边形,其中每一行对应于一个多边形。

例如,以下代码在 V 中定义三个顶点,并通过将顶点 1 连接到 2、2 连接到 3 和 3 连接到 1 来创建一个多边形。

V = [1 1; 2 1; 2 2];
F = [1 2 3 1];
patch('Faces',F,'Vertices',V)

如果您指定 Fpatch 函数会将补片对象的 Faces 属性设置为相同的值。补片对象会自动计算坐标数据,并将 XDataYDataZData 设置为适当的值。

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

补片定义,指定为一个结构体,其中包含对应于补片属性名称的字段和对应于补片属性值的字段值。

坐标区对象。如果您不指定坐标区对象,则 patch 使用当前坐标区。

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: patch(x,y,c,'FaceAlpha',.5,'LineStyle',':') 创建包含点线边的半透明多边形。

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

面颜色,指定为 'interp''flat'、RGB 三元组、十六进制颜色代码、颜色名称或短名称。

要为每个面创建不同颜色,请将 CDataFaceVertexCData 属性指定为一个数组,其中每个面对应一种颜色,或者每个顶点对应一种颜色。颜色可以基于每个面的顶点颜色通过插值来计算,也可以是统一颜色。对于插补颜色,请将此属性指定为 'interp'。对于统一颜色,请将此属性指定为 'flat'。如果您指定 'flat' 并为每个顶点指定不同颜色,则您指定的第一个顶点的颜色将决定面颜色。

要为所有面指定单一颜色,请将此属性指定为 RGB 三元组、十六进制颜色代码、颜色名称或短名称。

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

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

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

Sample of the color red

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

Sample of the color green

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

Sample of the color blue

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

Sample of the color cyan

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

Sample of the color magenta

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

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

"none"不适用不适用不适用无颜色

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

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

Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

[0.8500 0.3250 0.0980]"#D95319"

Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

[0.9290 0.6940 0.1250]"#EDB120"

Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

[0.4940 0.1840 0.5560]"#7E2F8E"

Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

[0.4660 0.6740 0.1880]"#77AC30"

Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

[0.3010 0.7450 0.9330]"#4DBEEE"

Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

[0.6350 0.0780 0.1840]"#A2142F"

Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

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

  • 范围 [0,1] 中的标量 - 在所有面上使用统一的透明度。值为 1 时完全不透明,值为 0 时完全透明。此选项不会使用 FaceVertexAlphaData 属性中的透明度值。

  • 'flat' - 根据 FaceVertexAlphaData 属性中的值,对每个面使用不同的透明度。首先,您必须将 FaceVertexAlphaData 属性指定为向量,其中一个面或一个顶点对应一个透明度值。第一个顶点的透明度值确定整个面的透明度。

  • 'interp' - 根据 FaceVertexAlphaData 属性中的值,对每个面使用插值透明度。首先,您必须将 FaceVertexAlphaData 属性指定为一个向量,其中一个顶点对应一个透明度值。通过基于各顶点处透明度数值进行插值,每个面上的透明度会渐变。

边颜色,指定为下表中的值之一。默认边颜色为黑色,值为 [0 0 0]。如果多个多边形共用一条边,则最先绘制的多边形将控制显示的边颜色。

描述结果

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

所有边使用一种颜色。如需更多详细信息,请参阅下表。

Rectangular patch with red edges

'flat'

每条边使用不同颜色。使用顶点颜色设置该顶点之后的边的颜色。您必须先将 CDataFaceVertexCData 指定为一个数组,其中一个顶点对应一种颜色。边颜色取决于您指定顶点的顺序。

Rectangular patch with a medium green upper-right vertex, a medium green top edge, a yellow upper-left vertex, a yellow left edge, a dark blue lower-left vertex, a dark blue lower edge, a light blue lower-right vertex, and a light blue right edge

'interp'

插入的边颜色。您必须先将 CDataFaceVertexCData 指定为一个数组,其中一个顶点对应一种颜色。通过在两个边界顶点上进行线性插值来确定边颜色。

Rectangular patch with interpolated edge colors. The top two vertices are medium green and yellow, respectively. The bottom two vertices are dark blue and light blue, respectively. The color of each edge is a gradient of the colors at the bounding vertices.

'none'不显示边。

不显示边。

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

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

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

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

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

Sample of the color red

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

Sample of the color green

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

Sample of the color blue

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

Sample of the color cyan

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

Sample of the color magenta

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

Sample of the color yellow

"black""k"[0 0 0]"#000000"

Sample of the color black

"white""w"[1 1 1]"#FFFFFF"

Sample of the color white

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

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

Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

[0.8500 0.3250 0.0980]"#D95319"

Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

[0.9290 0.6940 0.1250]"#EDB120"

Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

[0.4940 0.1840 0.5560]"#7E2F8E"

Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

[0.4660 0.6740 0.1880]"#77AC30"

Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

[0.3010 0.7450 0.9330]"#4DBEEE"

Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

[0.6350 0.0780 0.1840]"#A2142F"

Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

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

线型描述表示的线条
"-"实线

Sample of solid line

"--"虚线

Sample of dashed line

":"点线

Sample of dotted line

"-."点划线

Sample of dash-dotted line, with alternating dashes and dots

"none"无线条无线条

输出参量

全部折叠

补片对象,以标量形式返回。每个补片对象可以由一个或多个多边形组成。使用 p 可在创建补片对象后查询或更改其属性。

扩展功能

版本历史记录

在 R2006a 之前推出