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

pcolor

伪彩图

说明

示例

pcolor(C) 使用矩阵 C 中的值创建一个伪彩图。伪彩图以彩色单元(称为)阵列形式显示矩阵数据。MATLAB® 在 x-y 平面上创建该图的单一着色平面图。该平面由对应于各面的角(即顶点)的 x 坐标和 y 坐标的网格定义。网格覆盖区域 X=1:nY=1:m,其中 [m,n] = size(C)。矩阵 C 指定顶点处的颜色。每个面的颜色取决于其四个周围顶点之一的颜色。在这四个顶点中,x-y 网格中出现的第一个顶点决定该面的颜色。

示例

pcolor(X,Y,C) 指定顶点的 x 坐标和 y 坐标。C 的大小必须与 x-y 坐标网格的大小匹配。例如,如果 XY 定义一个 m×n 网格,则 C 必须为 m×n 矩阵。

示例

pcolor(ax,___) 指定绘图的目标坐标区。指定 ax 作为上述任何语法中的第一个参数。

示例

s = pcolor(___) 返回 Surface 对象。创建绘图后,使用 s 设置绘图属性。有关属性列表,请参阅 Surface 属性

示例

全部折叠

创建坐标向量 XY 以及名为 mymap 的颜色图,其中包含五种颜色:红色、绿色、蓝色、黄色和黑色。

X = [1 2 3; 1 2 3; 1 2 3];
Y = X';
mymap = [1 0 0; 0 1 0; 0 0 1; 1 1 0; 0 0 0];

创建矩阵 C,它将颜色图映射到九个顶点。九个顶点中的四个顶点决定面的颜色。指定这些顶点的颜色,使各面分别为 (1)、绿色 (2)、蓝色 (3) 和黄色 (4)。将其他顶点上的颜色设置为黑色 (5)。

C = [3 4 5; 1 2 5; 5 5 5];

对这些面绘图,并调用 colormap 函数以用 mymap 替换默认颜色图。

pcolor(X,Y,C)
colormap(mymap)

Hadamard 矩阵的元素是 1-1。我们可以使用双色颜色图来可视化此矩阵。

创建一个 20×20 Hadamard 矩阵。然后用黑白颜色图绘制该矩阵。使用 axis 函数反转 y 轴的方向,并将轴线设置为相等的长度。

C = hadamard(20);
pcolor(C)
colormap(gray(2))
axis ij
axis square

创建颜色矩阵 C。然后创建 C 的伪彩图,并将 Surface 对象存储在返回参数 s 中。

C = [1 2 3; 4 5 6; 7 8 9];
s = pcolor(C);

通过设置 sEdgeColor 属性来更改边框颜色。通过设置 LineWidth 属性使边框更粗。

s.EdgeColor = [1 0.7 0.3];
s.LineWidth = 6;

创建颜色矩阵 C。然后创建 C 的伪彩图,并将 Surface 对象存储在返回参数 s 中。

C = [5 13 9 7 12; 11 2 14 8 10; 6 1 3 4 15];
s = pcolor(C);

要跨面进行颜色插值,请将 sFaceColor 属性设置为 'interp'

s.FaceColor = 'interp';

创建矩阵 XY,它们定义顶点的固定间隔网格。通过计算 Y 的对数得到矩阵 LY 。然后创建矩阵 C,其中包含交替的颜色索引行组。

[X,Y] = meshgrid(1:20);
LY = log(Y);
colorscale = [1:20; 20:-1:1];
C = repmat(colorscale,10,1);

使用 C 中指定的颜色绘制 XLY。然后调整 y 轴上的刻度标签。

s = pcolor(X,LY,C);
tickvals = LY(2:2:20,1)';
set(gca,'YTick',tickvals);

创建矩阵 XY,它们定义顶点的固定间隔网格。通过计算 XY 的函数得到矩阵 XXYY 。然后创建矩阵 C,其中包含交替的颜色索引行组。

[X,Y] = meshgrid(-3:6/17:3);
XX = 2*X.*Y;
YY = X.^2 - Y.^2;
colorscale = [1:18; 18:-1:1];
C = repmat(colorscale,9,1);

使用 C 中的颜色绘制 XXYY

pcolor(XX,YY,C);

从 R2019b 开始,您可以使用 tiledlayoutnexttile 函数显示分块绘图。调用 tiledlayout 函数以创建一个 1×2 分块图布局。调用 nexttile 函数以创建坐标区对象 ax1ax2。通过将这些坐标区指定为 pcolor 的第一个参数,创建两个伪彩图。

tiledlayout(1,2)

% Left plot
ax1 = nexttile;
C1 = rand(20,10);
pcolor(ax1,C1)

% Right plot
ax2 = nexttile;
C2 = rand(50,10);
pcolor(ax2,C2)

输入参数

全部折叠

颜色矩阵,包含颜色图中的索引。C 中的值将颜色图数组中的颜色映射到每个面周围的顶点。一个面的颜色取决于它的四个顶点之一的颜色。在这四个顶点中,首先出现在 XY 中的那个顶点决定该面的颜色。如果您没有指定 XY,则 MATLAB 使用 X=1:nY=1:m,其中 [m,n] = size(C)。由于顶点颜色和面颜色之间的这种关系,C 的最后一行和最后一列中的值都不会在绘图中表示。

注意

面的第一个顶点是最靠近对应矩阵左上角的顶点。但是,由于 y 轴从下到上递增,绘图中显示的第一个顶点通常位于面的左下角。要获得您要的效果,您可能需要更改 y 轴的方向或矩阵 C 的方向。

C 中的值会缩放至颜色图的完整范围。C 中的最小值映射到颜色图数组中的第一行。C 中的最大值映射到颜色图数组中的最后一行。C 中的中间值线性映射到颜色图数组中的中间行。您可以使用 caxis 函数调整此映射。

C 的值存储在 Surface 对象的 CData 属性中。

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

x 坐标,指定为大小与 C 相同的矩阵或长度为 n 的向量,其中 [m,n] = size(C)X 的默认值是向量 (1:n)

要创建顶点的矩形网格,请将 X 指定为以下任一项:

  • 包含递增或递减值的向量。

  • 值沿一个维度递增或递减而沿另一个维度保持不变的矩阵。该变化的维度需要与矩阵 Y 中变化的维度相对。您可以使用 meshgrid 函数创建 XY 矩阵。

要创建参数化网格,请创建一个矩形网格,并通过数学函数传递它。

示例: X = 1:10

示例: X = [1 2 3; 1 2 3; 1 2 3]

示例: [X,Y] = meshgrid(1:10)

Surface 对象的 XData 属性存储 x 坐标。

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

y 坐标,指定为大小与 C 相同的矩阵或长度为 m 的向量,其中 [m,n] = size(C)Y 的默认值是向量 (1:m)

要创建顶点的矩形网格,请将 Y 指定为以下任一项:

  • 包含递增或递减值的向量。

  • 值沿一个维度递增或递减而沿另一个维度保持不变的矩阵。该变化的维度需要与矩阵 X 中变化的维度相对。您可以使用 meshgrid 函数创建 XY 矩阵。

要创建参数化网格,请创建一个矩形网格,并通过数学函数传递它。

示例: Y = 1:10

示例: Y = [1 1 1; 2 2 2; 3 3 3]

示例: [X,Y] = meshgrid(1:10)

Surface 对象的 YData 属性存储 y 坐标。

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

目标坐标区,指定为 Axes 对象。如果未指定坐标区,则 pcolor 在当前坐标区中绘图。

算法

使用 pcolorimageimagesc 函数显示彩色单元矩形阵列。颜色矩阵 C 和彩色单元之间的关系在每种情况下都不同。

  • pcolor(C) 通过对值进行标度转换以映射到完整范围的颜色图,从而使用 C 中的值定义顶点颜色。C 的大小确定顶点的数目。C 中的值将当前颜色图中的颜色映射到每个单元周围的顶点。

  • image(C) 通过将值直接映射到颜色图,来使用 C 定义元胞颜色。C 的大小确定元胞的数目。

  • imagesc(C) 通过对值进行标度转换以映射到完整范围的颜色图,从而使用 C 定义单元颜色。C 的大小确定元胞的数目。

扩展功能

在 R2006a 之前推出