✍️ 田冬冬 , 朱邓达 , 陈箫翰 • 📅 2025-12-31

# grd2cpt

官方文档:

  grd2cpt

简介:

  根据grid文件生成CPT

grd2cpt 读取一个或多个 grid 文件，并根据 grid 文件的z值范围生成对应的CPT文件。 在经典模式中，CPT文件的内容会输出到屏幕标准输出中。 而在现代模式中，该命令不会生成显式的CPT文件，而是隐式地将其自动设置为后面的绘图命令的默认CPT文件。 因此无法使用经典的 `gmt grd2cpt grid > cpt` 方式生成CPT文件。如果需要在现代模式中生成CPT文件， 则可以使用 `-H` 选项： `gmt grd2cpt grid -H > cpt` 。 关于经典模式和现代模式的语法区别，建议阅读《 经典模式 → 现代模式 》。

生成 CPT 文件时会基于选择的主 CPT，通过计算数据的累积分布函数 (CDF) 实现数据值到颜色的映射，从而使颜色经过直方图均衡化。 因此，如果网格文件及其生成的 CPT 在使用线性投影的 grdimage 中调用，则颜色在图上的面积分布将是均匀的。 设 z 为网格中的数据值，定义 CDF(Z) = (z < Z 的数量) / (网格中 z 的总数)。（忽略 NaN 值）。 这些 z 值随后被归一化到主 CPT，并按所需间隔进行颜色采样。

grid文件的z值范围以外的数值，将分别使用3种颜色来表示，分别是： 背景色 (B，background color，表示低于最小z值时所对应的颜色)、 前景色 (F，foreground color，表示高于最大z值时所对应的颜色)、 以及NaN颜色 (N，表示z值被定义为NaN时对应的颜色，即z值未定义的情况)。 默认情况下，这三种颜色会沿用 `-C` 选项所指定的主CPT文件的设置，但也可以使用 `-D` ， `-M` 和 `-N` 选项进行修改。 或者使用 set 命令对 COLOR_BACKGROUND、 COLOR_FOREGROUND 与 COLOR_NAN 进行自定义修改。

颜色模式 (RGB, HSV, CMYK) 会沿用 `-C` 选项所指定的主CPT文件的设置。 或者使用 set 命令对 COLOR_MODEL 进行自定义修改。

## 语法

gmt grd2cpt ingrid [ `-A` transparency[+a] ] [ `-C` cpt ] [ `-D`[i|o] ] [ `-E`[nlevels][+c][+f file] ] [ `-F`[R|c|g|h|r|x][+c[label]][+k keys] ] [ `-G` zlo/zhi ] [ `-H` ] [ `-I`[c][z] ] [ `-L` minlimit/maxlimit ] [ `-M` ] [ `-N` ] [ `-Q`[i|o] ] [ `-R` region ] [ `-S` h|l|m|u ] [ `-T` start/stop/inc|n ] [ `-V`[level] ] [ `-W`[w] ] [ `-Z` ] [ `-bo` binary ] [ `-h` headers ] [ `-o` flags ] [ --PAR=value ]

## 输入数据

ingrid[=ID|?varname][+b band][+d divisor][+n invalid][+o offset][+s scale]

> 输入网格名。通过追加 =ID 可指定 网格格式 [默认为 =nf]。 追加 ?varname 可指定 NetCDF 变量 [默认为 GMT 找到的第一个 2-D 网格]。 参数详细介绍请参考 读 netCDF 文件。

## 可选选项

-A

-A transparency[+a]

  设置透明度，transparency 的取值范围是0到100。 加上 +a 则该透明度同时应用于前景色、背景色和NaN颜色。 默认不透明，即0。

-C

-C[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),...][+h[hinge]][+i dz][+u|U unit][+s fname]

  指定主 CPT 名称，CPT 文件或用逗号分割的多个颜色， 以创建一个 CPT。如果不指定参数，则在现代模式下使用当前 CPT（如果可用）。 支持以下多种输入：

  1. 主 CPT 名称，例如 earth （详见 内置CPT ）， 可使用 CPT 名称 master 或包括相对路径的 section/master 来指定（内置 CPT 不可添加 .cpt 扩展名）。

  2. 自定义 CPT 文件 cpt ，例如 my_colors.cpt 。

  3. 自动从多个颜色 color\(_1\),color\(_2\)[,color\(_3\),...] 中创建线性连续的 CPT，其中 z 值从 0 开始， 每添加一种颜色 z 值加 1。在这种情况下， color\(_i\) 可以是 r/g/b (e.g. 255/100/75)， h-s-v (e.g. 180-0.8-1)， c/m/y/k (e.g. 80/50/40/30)，HTML十六进制 (e.g. #aabbcc) 或 颜色名称。逗号之间不能有空格。

  支持以下选项：

  - +h - 对于有软铰链 (soft hinge) 的主 CPT，可指定 hinge 值启用铰链， 而对于有硬铰链 (harde hinge) 的 CPT，可以修改铰链位置 hinge ，但不能禁用。

  - +i - 指定 dz 使网格 z 值范围分层，默认使用精确范围。

  - +s - 将创建的 CPT 保存到文件 fname。当 CPT 是自动创建时这很有用， 但必须用于 `-C` 的末尾。

  - +u - 对于任何其他主 CPT，可以通过指定其原始单位 unit 将其 z 值单位转换为米。

  - +U - 与 +u 类似，但是将 z 值单位从米转换为指定单位 unit 。

-D

-D[i|o]

  将背景色和前景色分别设置为输出的CPT文件中最低值和最高值对应的颜色（ `-D` 默认等效于 `-D` o ）。 不设置本项时，GMT默认使用主CPT文件规定的背景色与前景色，或是采用配置参数 COLOR_BACKGROUND、COLOR_FOREGROUND 与 COLOR_NAN 的设置。 加上 i 则设置为主CPT文件中最低值和最高值对应的颜色。

-E

-E[nlevels][+c][+f file]

  保持 CPT 中的颜色区间数量保持不变，将 CPT 的取值范围变为网格文件的 Z 值范围，创建一个线性颜色表。 附加 nlevels 把颜色表重新采样为 nlevels 个等间距的切片。 附加 +c 以估计数据的累积分布函数并相应地分配颜色区间。 如果使用了 +c，则可以附加 +f 以将 CDF 保存到 file；输出格式请参见 `-bo` 和 `-o` 。

-F

-F[R|c|g|h|r|x][+c[label]][+k keys]

  强制以指令设置的所需格式输出 CPT， 可以在颜色名称、单个灰度值、仅 r/g/b、h-s-v、c/m/y/k 或 #rrggbb 十六进制代码之间进行选择：

  - R - 尽可能输出颜色名称（否则使用 r/g/b）[默认]。

  - c - 使用 c/m/y/k 值输出颜色。

  - g - 输出单个 gray 灰度值（将通过 YIQ 转换将任何颜色转换为灰色）。

  - h - 输出 h-s-v 三元组。

  - r - 仅输出 r/g/b 代码（即使颜色名称适用）。

  - x - 输出 #rrggbb 十六进制代码。

  可以附加以下修饰符：

  - +c - 以分类格式输出离散色板。如果附加了 label，将为每个类别创建标签，以便在绘制 CPT 时使用。 label 可以是逗号分隔的类别名称列表（可以通过不提供名称来跳过某个类别）， 或者给定 start[-]，将从 start*（单个字母或整数）开始自动构建单调递增的标签。附加 - 则构建 *start-start+1 范围的标签。

  - +k - 分类 CPT 应具有字符串键而非数值条目。附加 keys，可以是每行包含一个键的文件，也可以是单个字母（例如 D）， 随后将从该点开始构建连续的字母键（例如 D, E, F, …）。

  注意：(1) 对于逗号分隔的键列表，请改用 `-T`。 (2) 如果给定 +cM 且类别数量为 12，将自动创建月份名称列表。 (3) 如果给定 +cD 且类别数量为 7，将创建星期名称列表。 这些标签的格式将取决于 FORMAT_TIME_PRIMARY_MAP、GMT_LANGUAGE 以及可能的 TIME_WEEK_START 设置。

-G

-G zlo/zhi

  截断主CPT文件，将主CPT的最小和最大z值分别限制为 zlo 与 zhi。

-H

-H

  仅限现代模式： 默认情况下是将CPT保存为隐藏的当前CPT，加上 `-H` 命令会显式地将CPT写入标准输出。 在写制作动画的脚本时，需要传递显式命名的CPT文件，因此需要使用本功能。 建议阅读《 经典模式 → 现代模式 》。

-I

-I[c][z]

  利用 -Iz 选项倒转CPT的z值指向（不包括前景色、背景色）。 利用 -Ic 选项翻转颜色的顺序，包括前景色和背景色。详细用法和说明见《 制作CPT 》。

-L

-L minlimit/maxlimit

  将 CPT 的范围限制在 minlimit/maxlimit 之间，并在估计 CDF(Z) 时不统计该范围之外的数据。 若要仅设置一个限制，请将另一个限制指定为“-”[默认使用数据的最小值和最大值]。

-M

-M

  使用 COLOR_BACKGROUND ， COLOR_FOREGROUND 和 COLOR_NAN 参数值， 覆盖主 CPT 中指定的背景色、前景色和 NaN 颜色。当与 `-D` 一起使用时，仅考虑 COLOR_NAN。

-N

-N

  不输出背景、前景和 NaN 颜色字段 [默认将输出这些字段]。

-Q

-Q[i|o]

  选择对数插值方案 [默认为线性]。 -Qi 表示输入的 z 值为 \(\log_{10}`(z)，分配颜色并输出 z [默认]。 **-Qo** 先取 :math:\)log_{10}`(z)，分配颜色，然后输出 z。

-R

-R xmin/xmax/ymin/ymax[+r][+u unit]

  指定数据范围。 (参数详细介绍)

-S

-S h|l|m|u

  强制生成0对称的CPT (范围从 -R 到 +R)。 -Sl : R =|zmin|, -Su : R = |zmax|, -Sm : R = min(|zmin|, |zmax|), -Sh : R = max(|zmin|, |zmax|).

-T

-T start/stop/inc 或 -T n

  指定要生成的 CPT 文件的 Z 值范围( start to stop )及 Z 值间隔(inc)。 默认情况下，会基于高斯累积分布函数 (CDF) 的等间距值，通过一种复杂的方案来自动计算这些值。 使用 -T n 会从累积正态分布中选择 n 个点生成 CPT 文件的 n 个颜色区间 [默认 11]。

-V

-V[level]

  设置 verbose 等级 [w]。 (参数详细介绍)

> 使用本选项会把 CDF(Z) 的估计值写入到 stderr。

-W

-W[w]

  不对输入颜色表进行插值，而是从色板的起始处开始选取输出颜色。这在与分类颜色表结合使用时特别有用。 使用 -Ww 生成一个循环（周期性）颜色表，使其范围无限循环重复。

-Z

-Z

  强制生成连续的CPT文件（默认为离散不连续的CPT）。

-bo

-bo[ncols][type][w][+l|b]

  控制二进制文件的输出格式。 (参数详细介绍)

> 使用 `-E` 保存 CDF 时有效。

-h

-h[i|o][n][+c][+d][+m segheader][+r remark][+t title]

  在读/写数据时跳过文件开头的若干个记录。 (参数详细介绍)

-^ 或 -

  显示简短的帮助信息，包括模块简介和基本语法信息（Windows下只能使用 -）

-+ 或 +

  显示帮助信息，包括模块简介、基本语法以及模块特有选项的说明

-? 或无参数

  显示完整的帮助信息，包括模块简介、基本语法以及所有选项的说明

--PAR=value

  临时修改GMT参数的值，可重复多次使用。参数列表见 配置参数

-o

-o cols[,...][,t[word]]

  对输出的数据进行列选择以及简单的代数运算。 (参数详细介绍)

## 关于透明

PostScript 语言最初并不支持透明度。 然而，Adobe 增加了一个扩展，允许开发者使用 PostScript 语言模型对某些形式的透明度进行编码， 但这只有在将 PostScript 转换为 PDF（以及通过 PDF 转换为任何栅格图像格式）时才能实现。

GMT 使用了这种模型，但存在一些限制：透明度只能基于单个对象或图层进行控制。 这意味着颜色规范（例如 CPT 文件中定义的或通过命令行选项给出的颜色）仅适用于矢量图形项（即文本、线条、多边形填充） 或整个图层（其中可能包括 PostScript 图像等项）。这种限制排除了在此类图像中实现像素级透明度控制的任何机制。 请注意，多边形和线条将遵循任何特定的对象透明度，但如果没有设置对象透明度，则这些项将继承通过 -t 设置的图层透明度（如果有）。

## 颜色铰链

一些 GMT 主动态 CPT 实际上是两个在 铰链 (hinge) 处汇合的独立 CPT。 通常，跨越铰链时颜色会发生剧烈变化，这被用于区分两个不同的域（例如，跨越海岸线的陆地和海洋）。 具有铰链的 CPT 将根据规定的新范围分别拉伸其两个部分，即从底部到铰链的部分与从铰链到顶部的部分将相互独立地进行拉伸。 铰链分为 硬 (hard) 铰链或 软 (soft) 铰链。软铰链必须通过在 CPT 名称后附加 +h[hinge] 来 激活。 如果选定的范围不包含已激活的软铰链或硬铰链，则仅从 CPT 中属于该范围的那一半采样颜色。

## 离散与连续 CPT

所有的 CPT 都可以被拉伸，但只有连续的 CPT 可以在新节点处采样（即通过在 `-T` 中给定增量）。 施加此限制是为了避免对原始 CPT 产生混叠。

## 示例

根据0/60/0/60范围内的5分精度的地形起伏数据，以GMT自带的geo为主CPT文件，生成对称的CPT:

    gmt grd2cpt @earth_relief_05m -R0/60/0/60 -Cgeo -Su

根据用户自己的数据mydata.nc，以GMT自带的relief为主CPT，以20为间隔生成0 - 200范围内的CPT文件:

    gmt grd2cpt mydata.nc -Crelief -T0/200/20

## 相关模块

grdhisteq, grdinfo, makecpt

## 参考文献

Crameri, F., (2018). Scientific colour-maps. Zenodo. http://doi.org/10.5281/zenodo.1243862

Crameri, F. (2018), Geodynamic diagnostics, scientific visualisation and StagLab 3.0, Geosci. Model Dev., 11, 2541-2562, https://doi.org/10.5194/gmd-11-2541-2018.