matlab使用教程(78)—控制颜色图范围

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 plot of a 2-D plane in 3-D space using the default colormap. The colors vary with variations in Z.


        曲面绘图数据与颜色图的关系描述了控制此演示中颜色的属性。实质上,Surface 对象的 CData 属性包含一个数组 C,该数组将曲面上的每个网格点与颜色图中的一种颜色建立关联。默认情况下,C 等于 Z,其中 Z 是在网格点处包含 z = f(x,y) 值的数组。因此,这些颜色随 Z 的变化而变化。

        映射范围由 Axes 对象的 CLim 属性控制。此属性包含 [cmin cmax] 形式的二元素向量。cmin 的默认值等于 C 的最小值,cmax 的默认值等于 C 的最大值。在本例中,CLim 为 [-20 20],因为 C 的范围反映 Z 的范围。

Relationship between the values in matrix C, the values -20 and 20 in the CLim property, and the rows in the colormap

        将 CLim 更改为 [0 20] 会将 0 处以及其下的所有值统一映射为颜色图中的第一种颜色。

Relationship between the values in matrix C, the values 0 and 20 in the CLim property, and the rows in the colormap

        clim函数将 CLim 属性更改为 [0 20]。注意,曲面的下半部分映射到颜色图中的第一种颜色(深蓝色)。之所以进行这种裁剪,是因为 C(等于 Z)在这些点处的值小于或等于 0。

clim([0 20])

Surface plot of a 2-D plane in 3-D space using the default colormap. The colors vary with variations in Z, and half of the plane is colored dark blue.

        在 R2022a 之前: 使用 caxis([0 20]) 更改颜色图范围。

您也可以拓宽映射范围,以查看数据在范围中所处的位置。例如,将范围更改为 [-60 20] 将得到仅使用一半颜色的曲面。颜色图的下半部分对应于 C 范围之外的值,因此曲面上不呈现这些颜色。

clim([-60 20])

Surface plot of a 2-D plane in 3-D space using the default colormap. The colors vary with variations in Z. This plane uses a subset of colors from the colormap.

        在 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 的形状
SurfaceCDataC 为 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) 的蓝色分量。
ImageCDataC 是 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 万种颜色的调色板。

        在确定调色板的大小时应考虑以下因素:

  • 用纯色填充大块区域时,最经济的方法是使用较小的调色板。它们在可视化曲面等高线时也很有用。

  • 较大的调色板显示细微过渡和平滑颜色梯度的效果更好。

        通过跨补片面的顶点进行颜色插值能够更明显地看出索引颜色和真彩色之间的差异。下面两个补片说明了一种极端情况。左侧的补片使用了小颜色图,而右侧的补片使用了真彩色。

Two triangular patches with interpolated color. One patch uses a 16-color colormap and the other patch uses truecolor. The transitions between colors are smoother in the patch that uses truecolor.

        如果您担心颜色图的调色板有限,可以向调色板中添加更多颜色。

  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 对于学习matlab使用教程,我建议你可以从以下几个方面入手。首先,掌握matlab的基础知识,包括语法、变量、函数等。你可以参考python基础专栏教程中的python全栈基础教程,这个教程可以帮助你掌握matlab的基础知识。\[1\]其次,了解matlab的解决问题的过程。一般来说,用户可以自定义脚本,在Command Window里运行脚本。而simulink则提供了另一种思路,即形化编程,适合物理模型的仿真。你可以在matlab的home标签下点击simulink来使用这个功能。\[2\]此外,还可以学习matlab的工具箱。工具箱是一组功能相近或者应用上自成体系的函数和GUI的集合,可以理解为matlab产品的模块。正版的matlab在购买时,每个工具箱都是要单独收费的。你可以根据自己的需求选择相应的工具箱来扩展matlab的功能。\[3\]希望这些信息对你有帮助! #### 引用[.reference_title] - *1* [2022Matlab小白入门详细教程](https://blog.csdn.net/weixin_46211269/article/details/125710415)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [建议收藏-新手简明入门级matlab使用教程](https://blog.csdn.net/qq_27595745/article/details/129643817)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

配电网和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值