7.1 CPT类型¶
CPT文件可以分成两类,一种适用于分类数据,一种适用于常规数据。下面会逐一介绍两种类型的CPT文件的格式,以及其如何实现数值与颜色之间的映射。
7.1.1 分类CPT¶
分类CPT文件适用于分类数据。所谓分类数据,是指数据只能取有限个离散的值。比如将陆地分为不同的类型:沙漠、森林、冰川等等。定义1代表沙漠,2代表森林,3代表冰川。显然值取1.5是没有意义的。
分类CPT文件的格式为:
<key1> <fill1> [;<label1>]
<key2> <fill2> [;<label2>]
...
<keyn> <filln> [;<labeln>]
B <fill_background>
F <fill_foreground>
N <fill_nan>
其中:
<key>
是分类数据的可能取值。<key>
必须单调递增但可不连续<fill>
是相应数据的填充色。可以是颜色,也可以是图案,见 填充<label>
则是数据的标签(可选)。通常设置为类型名,其主要有两个用途:让用户知道每一个可能取值代表的具体类型;在使用 psscale 绘制色标时可以将标签显示到色标旁边。
<key>
还可以取以下特殊值:
B
:定义小于<key1>
的值的填充色,即背景色,默认值由 COLOR_BACKGROUND 控制F
:定义大于<keyn>
的值的填充色,即前景色,默认值由 COLOR_FOREGROUND 控制N
:定义值为 NaN 时使用的填充色,默认值由 COLOR_NAN 控制
下面是一个分类CPT文件的示例:
0 yellow ;desert
1 green ;forest
2 red ;iceland
从中可以看出CPT文件是如何完成数据与颜色之间的映射:
- 当数据值为0时,其填充色为黄色,代表沙漠
- 当数据值为1时,其填充色为绿色,代表森林
- 当数据值为2时,其填充色为红色,代表冰川
7.1.2 常规CPT¶
常规CPT文件适用于连续变化的数据。对于连续变化的数据,无法为每个可能的数据值都指定颜色,通常的做法是为某些特定值指定颜色,其它值的颜色则通过插值得到。
常规CPT文件的格式为:
<z0> <color_min_1> <z1> <color_max_1> [L|U|B] [;<label>]
<z1> <color_min_2> <z2> <color_max_2> [L|U|B] [;<label>]
...
<zn-1> <color_min_n> <zn> <color_max_n> [L|U|B] [;<label>]
B <fill_background>
F <fill_foreground>
N <fill_nan>
常规CPT文件中的每一行均定义了一个Z值范围所对应的颜色范围。以第一行为例,其定义了数据值为 <z0>
时的颜色为 <color_min_1>
,数据值为 <z1>
时的颜色为 <color_max_1>
,而数据值位于 <z0>
到
<z1>
之间时颜色则通过对 <color_min_1>
和 <color_max_1>
线性或非线性插值得到。由此即定义了任意数值与颜色之间的映射关系。
在每一行后面,还可以加上两个可选项:
;<label>
是Z值范围所对应的标签,使用 psscale 模块绘制色标时加上-L
选项则会将<label>
作为色标的标注L|U|B
用于控制绘制色标时标注的放置位置。L
、U
、B
分别标注每个Z值范围的下限、上限或者同时标注Z值上下限
Z值还可以取以下特殊值:
B
:定义小于<z0>
的值的填充色,即背景色,默认值由 COLOR_BACKGROUND 控制F
:定义大于<zn>
的值的填充色,即前景色,默认值由 COLOR_FOREGROUND 控制N
:定义值为 NaN 时使用的填充色,默认值由 COLOR_NAN 控制
GMT对于常规CPT文件的格式由如下要求:
- Z值必须单调递增
- Z值不能存在间断,即每行的最大Z值必须与下一行的最小Z值相同
B|F|N
语句要放在CPT文件的开头或结尾- 可以指定颜色也可以指定填充图案,若
<color_min_1>
指定了填充图案,则<color_max_1>
必须设置为-
常规CPT文件的格式是相对比较灵活的,其又可以进一步细分为连续型CPT和间断性CPT:
- 连续型CPT
当一行的最大Z值与下一行的最小Z值对应同一个颜色
例如,下面的示例CPT文件中在Z取0.5处颜色是连续的:
0 black 0.5 red 0.5 red 1 yellow
- 间断型CPT
即某一行的最大Z值与下一行的最小Z值对应不同的颜色。
例如,下面的示例CPT文件中,第一行表明Z取0.5时为红色,第二行表明Z取0.5时为蓝色,即在Z取0.5处颜色存在间断:
0 black 0.5 red 0.5 blue 1 yellow
进一步,当某一行内最小Z值和最大Z值对应相同的颜色时则构成了单色间断型CPT。例如,下面的示例CPT文件中,第一行指定了Z取0和0.5均定义为黑色,意味着Z取0到 0.5之间的任意数值均为黑色。第二行则指定了Z取0.5到1之间的任意数值均为红色:
0 black 0.5 black 0.5 red 1 red