注:本文是《MATLAB科技绘图与学术图表绘制从理论到实践》一书知识点的串讲。
单击此处观看优快云视频课程《MATLAB全套核心知识点套餐》。学好MATLAB,站在巨人的肩膀上,事半功倍。
着色,怎么着,是技术问题;着什么色,是艺术问题。本文介绍MATLAB着色的基础知识。
1 颜色的表示
MATLAB中可以使用标准颜色、RGB着色和索引着色等多种方式对图表对象进行着色。
标准颜色是MATLAB中预定义好的颜色,每个标准颜色有一个固定的名字,直接使用名字就可以得到对应的颜色。常见的标准颜色如表所示。
标准颜色
颜色 说 明 演示 颜色 说 明 演示
y 黄色 g 绿色
m 品红色 b 蓝色
c 青蓝色 w 白色
r 红色 k 黑色
16进制和RGB着色都是使用红色、绿色和兰色三种颜色混合得到新的颜色。表示颜色的16进制整数用字符串赋给对象颜色属性,字符串类似于’#FF0000’。RGB着色则用一个3元素向量赋给对象颜色属性,类似于[1 0 0]。各分量分别表示红、绿、兰三种颜色,取值0255,MATLAB中进行了归一化,取值01。注意16进制整数中,’#’号后面有6位,与RGB格式对应,前2位表示红色分量,中间2位表示绿色分量,后面2位表示兰色分量,只是值用16进制整数表示。表示颜色的16进制整数最小值为00,对应十进制的0;最大值FF,对应十进制的255。这样,两种表示方法就对应起来了。
表中列出了一些颜色的16进制整数和RGB表示。
RGB着色
红 绿 蓝 颜色 16进制整数 演示
0 0 0 黑色 #000000
1 1 1 白色 #FFFFFF
1 0 0 红色 #FF0000
0 1 0 绿色 #00FF00
0 0 1 兰色 #0000FF
1 1 0 黄色 #FFFF00
1 0 1 粉红 #FF00FF
0 1 1 青色 #00FFFF
0.5 0.5 0.5 灰色 #808080
0.5 0 0 深红色 #800000
1 0.62 0.40 紫铜色 #FF9E66
0.49 1 0.83 碧绿色 #7CFFD3
还有一种常用的着色方法叫索引着色,将在稍后详细介绍。使用索引着色,可以对图表进行整体的渲染。
下面绘制复合线形图,并用不同的方法给图元对象着色。
给复合线形图着色
2 给一组对象着色
对于线形图、柱状图、条图、面积图和饼图等分类型图表,可以使用colororder函数给一组对象着色。该函数从预先定义好的一组颜色中依次循环取用。MATLAB中已经预先定义了多种颜色序列,如表所示。
MATLAB内置的颜色序列
名称 颜色序列
gem
gem12
glow
glow12
sail
reef
meadow
dye
earth
下面使用MATLAB预先定义好的颜色序列绘制复合柱状图。
使用MATLAB内置的颜色序列绘图
如果MATLAB内置的颜色序列不够用,还可以自定义颜色序列。下面自定义不同的颜色序列,并用于不同复合柱状图的绘制。
自定义颜色序列绘制复合柱状图
3 曲面的索引着色
索引着色需要两张表,第一张表中曲面的每个数据点对应一个索引值,第二张表中每个索引值对应一种颜色,称为颜色查找表。两张表通过索引值建立数据点和颜色值之间的映射关系。
每个MATLAB图形窗口都有一个颜色查找表与之相连。颜色查找表是一个3列矩阵,其长度等于它定义的颜色数目。矩阵的每一行指定3个0和1之间的值,定义一种颜色。这些值定义RGB分量,即红色、绿色和兰色组分的强度。
使用没有变量的colormap函数可以返回当前图形的颜色查找表。例如,MATLAB默认的颜色查找表包括256种颜色。
MATLAB内置的颜色查找表
名称 说 明 色 条
parula 兰色、青色、橙色和黄色之间渐变
turbo 兰色和红色之间渐变
hsv 变化HSV颜色模型中的色度组分
hot 黑色、红色、橘红色、黄色和白色之间渐变
cool 青色和洋红之间渐变
spring 洋红和黄色之间渐变
summer 绿色和黄色之间渐变
autumn 红色向橘黄色、黄色渐变
winter 兰色和绿色渐变
gray 线性灰阶颜色查找表
bone 为含有较高的兰色组分的gray颜色查找表
copper 黑色和亮铜色之间渐变
pink 品红色和白色渐变
sky 白色和天兰色之间渐变
abyss 深兰色和天兰色之间渐变
jet 兰色、青色、黄色、橘红色、红色之间渐变
lines 颜色由坐标系对象的ColorOrder属性和灰色阴影确定的颜色查找表
colorcube 包含RGB颜色空间中尽可能多的规则间隔的颜色
prism 重复红色、橘红色、黄色、绿色、兰色和紫色等六种颜色
flag 由红色、白色、兰色和黑色组成
white 白色
下面创建3行3列共9个坐标系,在各个坐标系中创建曲面图,并给每个曲面图应用不同的颜色查找表。各曲面图的标题为它采用的颜色查找表的名称。
创建曲面图并应用不同的颜色查找表
4 曲面的真彩色着色
24位显示的计算机系统可以显示超过1600万种颜色。有了这种能力,可以将颜色数据直接定义成RGB值,而不需要用索引值进行颜色映射。直接定义数据点RGB值的着色方式称为真彩色着色。
如图所示,用一个m×n×3的数组指定真彩色,其中m×n表示曲面的网格大小为m行n列。图中左图为定义曲面图的矩阵,右图为定义该图RGB值的矩阵。
定义曲面图及其真彩色的矩阵
下面创建一个真彩色随机着色的曲面图。
一个随机着色的曲面图 用索引值设置曲面属性
5 面片着色
前面两节介绍的是规则网格曲面,MATLAB中不规则曲面用patch(面片)对象进行描述。图中的人脸模型可以看作一个面片,该面片由很多三角形、四边形和多边形的更小的面组合而成。这些三角形、四边形和多边形的面称为该面片的小面。后面会频繁提到小面。
面片
二维和三维面片的创建。
创建多边形并着色
用patch函数创建一个扇面
MATLAB很多图表中包含面片对象,可以通过索引获取该面片对象并修改它的属性,根据自己的喜好对图表进行美化。
下面创建一个三维饼图,然后获取图中的面片并重新配色。
三维饼图
修改三维饼图的颜色
面片面的着色,主要有单色着色、刻面着色和插值着色三种。
生成多边形
多边形的渐变着色
单色着色
插值着色