今天,给各位带来平面彩图的一种,即伪彩图。Matlab中,可以使用pcolor函数来绘制这种伪彩图,伪彩图以彩色单元(称为面)阵列形式显示矩阵数据。本文,主要讲解伪彩图函数pcolor的常见用法、语法说明、用四种颜色绘制四个面、对 Hadamard 矩阵绘图、修改边框、跨面进行颜色插值、指定半对数网格、指定参数化网格以及指定目标坐标区等用法。
下面,我们首先给出Matlab中关于pcolor函数的帮助文档如下:
>> help pcolor pcolor Pseudocolor (checkerboard) plot. pcolor(C) is a pseudocolor or "checkerboard" plot of matrix C. The values of the elements of C specify the color in each cell of the plot. In the default shading mode, 'faceted', each cell has a constant color and the last row and column of C are not used. With shading('interp'), each cell has color resulting from bilinear interpolation of the color at its four vertices and all elements of C are used. The smallest and largest elements of C are assigned the first and last colors given in the color table; colors for the remainder of the elements in C are determined by table-lookup within the remainder of the color table. pcolor(X,Y,C), where X and Y are vectors or matrices, makes a pseudocolor plot on the grid defined by X and Y. X and Y could define the grid for a "disk", for example. pcolor(AX,..) plots into AX instead of GCA. H = pcolor(...) returns a handle to a SURFACE object. pcolor is really a SURF with its view set to directly above.
常见用法
pcolor(C) pcolor(X,Y,C) pcolor(ax,___) s = pcolor(___)
语法说明
pcolor(C) 使用矩阵 C 中的值创建一个伪彩图。伪彩图以彩色单元(称为面)阵列形式显示矩阵数据。MATLAB® 在 x-y 平面上创建该图的单一着色平面图。该平面由对应于各面的角(即顶点)的 x 坐标和 y 坐标的网格定义。网格覆盖区域 X=1:n 和 Y=1:m,其中 [m,n] = size(C)。矩阵 C 指定顶点处的颜色。每个面的颜色取决于其四个周围顶点之一的颜色。在这四个顶点中,x-y 网格中出现的第一个顶点决定该面的颜色。
pcolor(X,Y,C) 指定顶点的 x 坐标和 y 坐标。C 的大小必须与 x-y 坐标网格的大小匹配。例如,如果 X 和 Y 定义一个 m×n 网格,则 C 必须为 m×n 矩阵。
pcolor(ax,_) 指定绘图的目标坐标区。指定 ax 作为上述任何语法中的第一个参数。
s = pcolor(_) 返回 Surface 对象。创建绘图后,使用 s 设置绘图属性。
用四种颜色绘制四个面
创建坐标向量 X 和 Y 以及名为 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 矩阵绘图
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);
通过设置 s 的 EdgeColor 属性来更改边框颜色。通过设置 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);
要跨面进行颜色插值,请将 s 的 FaceColor 属性设置为 ‘interp’。
s.FaceColor = 'interp';
指定半对数网格
创建矩阵 X 和 Y,它们定义顶点的固定间隔网格。通过计算 Y 的对数得到矩阵 LY 。然后创建矩阵 C,其中包含交替的颜色索引行组。
[X,Y] = meshgrid(1:20); LY = log(Y); colorscale = [1:20; 20:-1:1]; C = repmat(colorscale,10,1);
使用 C 中指定的颜色绘制 X 和 LY。然后调整 y 轴上的刻度标签。
s = pcolor(X,LY,C); tickvals = LY(2:2:20,1)'; set(gca,'YTick',tickvals);
指定参数化网格
创建矩阵 X 和 Y,它们定义顶点的固定间隔网格。通过计算 X 和 Y 的函数得到矩阵 XX 和 YY 。然后创建矩阵 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 中的颜色绘制 XX 和 YY。
pcolor(XX,YY,C);
指定目标坐标区
从 R2019b 开始,您可以使用 tiledlayout 和 nexttile 函数显示分块图。调用 tiledlayout 函数以创建 1×2 分块图布局。调用 nexttile 函数以创建坐标区对象 ax1 和 ax2。通过将这些坐标区指定为 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)
由于我用的是Matlab2016,不支持tiledlayout和nexttile函数,因此我用subplot来代替这种分区间绘制方式,修改后的代码如下:
clc clear all % Left plot subplot(1,2,1) C1 = rand(20,10); pcolor(C1) % Right plot subplot(1,2,2) C2 = rand(50,10); pcolor(C2)
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/1676.html