1.控制颜色图范围
对于您创建的许多类型的可视化图形,MATLAB® 默认将完整的数据范围映射到颜色图上。数据中的最小值映射到颜色图中的第一行,最大值映射到颜色图中的最后一行。所有中间值线性映射到颜色图的中间行。
这种默认映射适用于大部分情况,但您也可以对选定的任意范围进行映射,即便您选择的范围不同于数据的范围也可以。通过选择不同的映射范围可以执行以下操作:
-
查看有哪些数据刚好处于指定的范围边界或超出指定的范围。
-
查看您的数据落在指定范围的哪个位置。
假设曲面 Z = X + Y,其中 -10≤ x ≤10,-10≤ y ≤10。
[X,Y] = meshgrid(-10:10);
Z = X + Y;
s = surf(X,Y,Z);
xlabel('X');
ylabel('Y');
zlabel('Z = C');
colorbar
曲面绘图数据与颜色图的关系描述了控制此演示中颜色的属性。实质上,Surface
对象的 CData
属性包含一个数组 C
,该数组将曲面上的每个网格点与颜色图中的一种颜色建立关联。默认情况下,C
等于 Z
,其中 Z
是在网格点处包含 z = f(x,y) 值的数组。因此,这些颜色随 Z
的变化而变化。
映射范围由 Axes
对象的 CLim
属性控制。此属性包含 [cmin cmax]
形式的二元素向量。cmin
的默认值等于 C
的最小值,cmax
的默认值等于 C
的最大值。在本例中,CLim
为 [-20 20]
,因为 C
的范围反映 Z
的范围。
将 CLim
更改为 [0 20]
会将 0
处以及其下的所有值统一映射为颜色图中的第一种颜色。
clim函数将 CLim
属性更改为 [0 20]
。注意,曲面的下半部分映射到颜色图中的第一种颜色(深蓝色)。之所以进行这种裁剪,是因为 C
(等于 Z
)在这些点处的值小于或等于 0。
clim([0 20])
在 R2022a 之前: 使用 caxis([0 20])
更改颜色图范围。
您也可以拓宽映射范围,以查看数据在范围中所处的位置。例如,将范围更改为 [-60 20]
将得到仅使用一半颜色的曲面。颜色图的下半部分对应于 C
范围之外的值,因此曲面上不呈现这些颜色。
clim([-60 20])
在 R2022a 之前: 使用 caxis([-60 20])
更改颜色图范围。
注意
您可以为曲面绘图、补片、图像或任何使用颜色图的图形对象设置 CLim
属性。但是,此属性仅影响 CDataMapping
属性设置为 'scaled'
的图形对象。如果 CDataMapping
属性设置为 'direct'
,则 C
索引的所有值将直接映射到颜色图,而不会进行任何缩放。C
的任何小于 1 的值将裁剪映射至颜色图中的第一种颜色。C
的任何大于颜色图长度的值则裁剪映射至颜色图中的最后一种颜色。
2.颜色图和真彩色之间的差异
曲面、补片和图像等许多图形对象支持两种不同的指定颜色的方法:颜色图(使用索引颜色)和真彩色。每种方法涉及不同的工作流,对视觉表示有不同的影响。
2.1工作流差异
颜色图是一个 m×3 数组,其中每一行指定一个 RGB 三元组。要在图形表示中使用颜色图,应为图形中的每个位置分配一个索引。每个索引对应颜色图中的一行,用以在图形中的指定位置显示一种颜色。相比之下,使用真彩色则是在图形中的每个位置指定一个 RGB 三元组。
确定使用何种方法时要考虑的一些要点如下。
-
真彩色更为直接。如果您想为图形中的特定位置分配具体的红色、绿色、蓝色值,使用真彩色通常更为容易。
-
要在调色板区域中进行更改,则使用颜色图更为容易。例如,如果您想加亮从蓝色到绿色的渐变,则在颜色图中编辑这些行比在图形中的各个位置编辑颜色更为容易。
-
您的数据格式可能更适合其中一个工作流。例如,许多 GIF 压缩图像使用索引颜色进行存储。
这两种标记颜色的方法都是使用颜色数组 C
来指定颜色信息。C
的形状取决于图形对象的类型以及您选取的颜色标记方法。下表归纳了这些差异。
图形对象的类型 | 包含颜色数组 C 的属性 | 索引颜色 C 的形状 | 真彩色 C 的形状 |
---|---|---|---|
Surface | CData | C 为 m×n 数组,其大小与 z 坐标数组相同。C(i,j) 处的值指定 Z(i,j) 的颜色图索引。 | C 为 m×n×3 数组,其中 C(:,:,i) 的大小与 z 坐标数组相同。C(i,j,1) 指定 Z(i,j) 的红色分量。C(i,j,2) 指定 Z(i,j) 的绿色分量。C(i,j,3) 指定 Z(i,j) 的蓝色分量。 |
Image | CData | C 是 m×n 图像的一个 m×n 数组。C(i,j) 处的值指定像素 (i,j) 的颜色图索引。 | C 是 m×n 图像的一个 m×n×3 数组。C(i,j,1) 指定像素 (i,j) 的红色分量。C(i,j,2) 指定像素 (i,j) 的绿色分量。C(i,j,3) 指定像素 (i,j) 的蓝色分量。 |
Patch (x, y, z) | CData | 在标记补片面的颜色时,C 是 m 个补片面的一个 1×m 数组。C(i) 指定面 i 的颜色图索引。在标记补片顶点的颜色时, C 是一个 m×n 数组,其中 m 为每个面的顶点数,n 为面数。C(i,j) 指定面 i 的顶点 j 的颜色图索引。 | 在标记补片面的颜色时,C 是 m 个补片面的一个 m×3 数组。C(i,:) 指定面 i 的红色、绿色和蓝色值。在标记补片顶点的颜色时, C 是一个 n×3 数组,其中 n 为顶点总数。C(i,:) 指定顶点 i 的红色、绿色和蓝色值。 |
Patch (面-顶点数据) | FaceVertexCData | 在标记补片面的颜色时,C 是 m 个补片面的 1×m 数组。C(i) 指定面 i 的颜色图索引。在标记补片顶点的颜色时, C 为 1×n 数组,其中 n 为顶点总数。C(i) 指定顶点 i 的颜色图索引。 | 在标记补片面的颜色时,C 是 m 个补片面的一个 m×3 数组。C(i,:) 指定面 i 的红色、绿色和蓝色值。在标记补片顶点的颜色时, C 是一个 n×3 数组,其中 n 为顶点总数。C(i,:) 指定顶点 i 的红色、绿色和蓝色值。 |
2.2视觉表示的差异
颜色图提供由 m 种颜色组成的调色板,其中 m 为颜色图的长度。相比之下,真彩色则提供涵盖 256×256×256 ≈ 168 万种颜色的调色板。
在确定调色板的大小时应考虑以下因素:
-
用纯色填充大块区域时,最经济的方法是使用较小的调色板。它们在可视化曲面等高线时也很有用。
-
较大的调色板显示细微过渡和平滑颜色梯度的效果更好。
通过跨补片面的顶点进行颜色插值能够更明显地看出索引颜色和真彩色之间的差异。下面两个补片说明了一种极端情况。左侧的补片使用了小颜色图,而右侧的补片使用了真彩色。
如果您担心颜色图的调色板有限,可以向调色板中添加更多颜色。