makecpt

贡献者:

周茂, 田冬冬, 陈箫翰, Liming Li

最近更新日期:

2023-11-07


官方文档:

makecpt

简介:

制作 GMT CPT 文件

在经典模式中,CPT 文件的内容会输出到屏幕标准输出中。而在现代模式中,该命令不会生成显式的 CPT 文件,而是隐式地将其自动设置为后续命令的默认 CPT 文件。因此无法使用经典的 gmt makecpt xxx > cpt 方式生成 CPT 文件。如果需要在现代模式中生成 CPT 文件,则可以使用 -H 选项: gmt makecpt xxx -H > cpt 。关于经典模式和现代模式的语法区别,建议阅读 经典模式 → 现代模式 章节。

该命令基于主 CPT 创建用户所需的 CPT,获得的 CPT 可以是离散或连续的,颜色也可相对主 CPT 反转。如果需使用 GMT 之外的 CPT 作为主 CPT,可在 cpt-city 中查询。

-T 选项所指定的 z 值范围以外的数值,分别使用 3 种颜色来表示,分别为:

  • 背景色 (B,background color), 表示低于最小 z 值时所对应的颜色

  • 前景色 (F,foreground color), 表示高于最大 z 值时所对应的颜色

  • 以及 NaN 值颜色 (N),表示 z 值被定义为 NaN 时对应的颜色,即 z 值未定义的情况

默认情况下,这三种颜色会沿用 -C 选项所指定的主 CPT 文件的设置,但也可以使用 -D-M 以及 -N 选项修改。或者使用 gmtset 命令对 COLOR_BACKGROUNDCOLOR_FOREGROUNDCOLOR_NAN 进行自定义修改。需注意,选项总会覆盖自定义参数值。

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

语法

gmt makecpt [ -Atransparency[+a] ] [ -Ccpt ] [ -D[i|o] ] [ -E[nlevels] ] [ -F[R|r|h|c|x][+c[label]][+kkeys] ] [ -Gzlo/zhi ] [ -H ] [ -I[c][z] ] [ -M ] [ -N ] [ -Q ] [ -Smode ] [ -T[min/max/inc[+b|i|l|n]|file|list] ] [ -V[level] ] [ -W[w] ] [ -Z ] [ -bibinary ] [ -dinodata[+ccol] ] [ -hheaders ] [ -iflags ] [ --PAR=value ]

必选选项

无。

可选选项

-Atransparency[+a]

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

-C[[section/] master_cpt[+h[hinge]][+u|Uunit]|local_cpt|color1,color2[,color3,…]]

输入主 CPT 文件名。一般情况下,输入文件为 GMT 内置 CPT (请见 内置CPT) 之一,可通过 master_cptsection/master_cpt 的形式指定,但不能带有 .cpt 后缀。如果主 CPT 中存在软铰链(soft-hinge),则可使用 +h 激活铰链,其铰链值为 0。如果 CPT 中存在硬铰链(hard-hinge),则使用 +h[hinge] 激活铰链,并可修改铰链值为 hinge 。对于不存在铰链的内置 CPT,用户可使用 +Uunit 将 z 值从其他单位转换为米,或使用 +uunit 将米转换为其他单位,unit 可以从 e|f|k|M|n|u 中取值,详见 单位

主 CPT 也可以为用户自己的 CPT 文件,这时,CPT 必须带有 .cpt 后缀。

此外,除设置主 CPT 文件名外, 也可指定一个颜色序列 color1,color2[,color3,…] 创建线性连续 CPT,其中 z 值从 0 开始,每种颜色递增 1。这种情况下,colorn 可以为 r/g/b 三元数(见 颜色)或者 HTML 16 进制颜色 (例如,#aabbcc)。

-D[i|o]

将背景色和前景色分别设置为 CPT 文件中最小值和最大值对应的颜色, io 分别表示使用输出 CPT 或者输入 CPT [默认为 -D-Do, 即输出 CPT 的背景色和前景色]。不设置本项时,GMT 默认使用主 CPT 文件规定的背景色与前景色,或是采用配置参数 COLOR_BACKGROUNDCOLOR_FOREGROUNDCOLOR_NAN 的设置。

-E[nlevels]

从命令行或者标准输入中读取表数据文件,使用最后一列决定数据的范围,nlevels 表示生成的 CPT 文件会被重采样为 nlevels 个等间距的切片,上述两者即等同于 -T 选项作用。使用 -i 选项可选择其他列决定数据范围,二进制文件则需同时使用 -bi 。如果不给定 nlevels 参数,则默认其等于主 CPT 中切片数。

-F[R|r|h|c|x][+c[label]][+kkeys]
  • -FR ,输出的 CPT 以 r/g/b 灰度值,或名称指定颜色[默认];

  • -Fr ,输出的 CPT 以 r/g/b 方式指定颜色;

  • -Fh ,输出的 CPT 以 h-s-v 方式指定颜色;

  • -Fc ,输出的 CPT 以 c/m/y/k 方式指定颜色;

附加 +c 以分类格式输出离散型 CPT。如果追加 label ,则在绘制 CPT 时,每个分类均创建标签。标签的格式可以是逗号分隔的列表(中间可通过不指定名称来跳过类别),也可以通过 start[-] 来指定以 start 为首,依次递增的标签。追加 - 则表示标签的范围为 startstart+1。注意,存在以下特殊情况:

  • 如果使用 +cM 且类别数为 12,则 GMT 会自动创建月份名称列表

  • 如果使用 +cD 且类别数为 7,则创建一周内每天名称列表

上述两种情况,标签的格式受 FORMAT_TIME_PRIMARY_MAPGMT_LANGUAGETIME_WEEK_START 参数影响。

附加 +kkeys 选项表示使用字符而不是数字设置分类 CPT 的键值。keys 可以是一个文件,其中包含键值列表;keys 也可以是单个字符,例如:D,则键值列表为 D、E、F…。如果是逗号分隔的键值列表,则应使用 -T 选项,而不是该选项。

-Gzlo/zhi

截断主 CPT 文件,将主 CPT 的最小和最大 z 值分别限制为 zlozhi。上述两值若设置为 NaN,则仍旧使用原本的最值。截断的操作发生在重采样之前。译注:该选项通常用于地形、深度等具有实际意义的 CPT。

-H

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

-I[c][z]
  • -Ic 选项翻转颜色的顺序,包括前景色和背景色以及 COLOR_BACKGROUNDCOLOR_FOREGROUND 参数设置的前景色和背景色[默认]。详细用法和说明见 制作CPT

  • -Iz 选项翻转 CPT 的 z 值(不包括前景色、背景色)。该操作发生于 -G-T 选项之前,因此使用上述两选项时,需先考虑 -Iz 操作后的 z 值的实际范围。

-M

使用 gmt.conf 文件或者命令行中设置的 COLOR_BACKGROUNDCOLOR_FOREGROUNDCOLOR_NAN 覆盖 CPT 中的前景色、背景色和 NaN 值的颜色。如果和 -D 同时使用,则前景色和背景色均被 -D 覆盖。

-N

不在生成的 CPT 中写入前景色,背景色和 NaN 值的颜色[默认写入]。

-Q

-T 选项输入为对数值 log10(z) 时,通过对数值分配颜色,但是输出结果仍为原值 z

-Smode

从命令行或者标准输入中读取表数据文件,使用 -i 选项可调整输入列,从该文件中确定适合 -T 选项的范围。下述选项给出确定范围的类型:

  • -Sr 使用 min/max 作为范围

  • -Sinc[+d] 使用 min/max 作为范围,但四舍五入到最近的 inc, 以 inc 为间隔,追加 +d 生成离散 CPT

  • -Sascl 以平均值为对称中心,scl * sigma 为单边宽度生成范围

  • -Smscl 以中值为对称中心,scl * sigma 为单边宽度生成范围

  • -Spscl 以众数(通过 Least Median of squares 获取)为对称中心, scl * LMS_scale 为单边宽度生成范围

  • -Sqlow/high 设置低分位数和高分位数为范围(百分比格式)

-T[min/max/inc[+b|i|l|n]|file|list]

定义要生成的 CPT 文件的 z 值范围及 z 值间隔。该选项可有如下几种形式:

  • 若使用了 -C 选项且 inc 未指定,则 z 值间隔的数目与输入的主 CPT 文件相同

  • inc 后有 +n ,则将 inc 解释为 z 值间隔的数目而不是 z 值间隔

  • 使用一个文件给定数值列表

  • 使用一个数值列表

详见 生成一维数组

-W[w]

不对输入主 CPT 内插,而是从 CPT 的开始选取输出颜色,直到所有区间的颜色都被分配完。这在与分类 CPT 同时使用时非常有用。使用 -Ww 可生成一个无限重复范围的循环 CPT。

-Z

生成连续 CPT 文件。默认生成不连续 CPT 文件,即每个 Z 值切片内为同一颜色。

-V[level] (more …)

设置 verbose 等级 [w]

-bi[ncols][type][w][+l|b] (more …)

设置二进制输入数据的格式

-dinodata (more …)

将输入数据中值为 nodata 的列替换为 NaN

-h[i|o][n][+c][+d][+msegheader][+rremark][+ttitle] (more …)

跳过或生成指定数目的头段记录

-icols[+l][+sscale][+ooffset][,][,t[word]] (more …)

设置输入数据列及简单变换(0表示第一列,t 表示文本列)

-^-

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

-++

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

-? 或无参数

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

--PAR=value

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

生成一维数组

下面将展示如何使用 gmtmath 生成一维数组(其中大部分操作也可通过 linux 中的 seq 命令方便地实现)

不使用任何子选项

以 0.1 为步长,生成 3.1 到 4.2 等等间隔序列

gmt math -o0 -T3.1/4.2/0.1 T =
3.1
3.2
...
4.2

+a 选项

该选项不对生成的数列进行运算操作,而是将该数列以列的形式追加到输出表数据,类似 linux 中的 paste 命令。

+b 选项

以 3 和 20 分别为起点和终点,创建一个 2 的整数幂的列表,将生成的整数幂以 1 为步长取值 -T3/20/1+b

gmt math -o0 -T3/20/1+b T =
4
8
16

+l 选项

以 7 和 135 分别为起点和终点,先创建一个 10 的整数幂的列表,当 inc 为 1 时,输出该列表;当 inc 为 2 时,同时输出该列表中每个元素的 1,2,5 倍值(不包括超出原始数据范围的部分); 当 inc 为 3 时,同时输出该列表中每个元素的 1,2,…,9 倍值(同样不包括超出原始数据范围的部分)。 -T7/135/2+l 将会生成如下数列

gmt math -o0 -T7/135/2+l T =
10
20
50
100

inc 为负整数时,将实现如下效果

gmt math -o0 -T1e-4/1e4/-2+l T =
0.0001
0.01
1
100
10000

+i 选项

该选项将以 1 作为默认步长,第三个数字做为每步长中的数字个数 length。假设需要在 1 分钟内每 24 秒生成一帧

gmt math -o0 -T0/60/24+i T =
0
0.0416666666667
0.0833333333333
0.125
0.166666666667
...
60

+n 选项

生成固定长度的数列。以 3.44 和 7.82 为起点和终点,生成长度为 5 的等间隔序列

gmt math -o0 -T3.44/7.82/5+n T =
3.44
4.535
5.63
6.725
7.82

-T 后直接加文件或逗号分隔的数列

-T 后可以直接加文件,文件中即为要生成的列表;另外,可以直接使用逗号分隔,将列表附加到 -T 选项后,如下为 Fibonacci 数列前 6 项

gmt math -o0 -T0,1,1,2,3,5 T =
0
1
1
2
3
5

: 如果数列只包含一个值,必须在其后加逗号以表明仍是一个数列

+u 选项

如果文件或者逗号分隔的数列中有重复数字或未排序,可以使用 +u 选项去重并排序。

+t 选项

生成绝对时间序列。在 inc 后分别添加 yodhms 表示时间步长的单位为年,月,日,时,分,秒。在其后附加 +t 选项,可以进一步强调生成时间序列,也可以不加

gmt math -o0 -T2020-03-01T/2020-03-07T/1d T =
2020-03-01T00:00:00
2020-03-02T00:00:00
2020-03-03T00:00:00
2020-03-04T00:00:00
2020-03-05T00:00:00
2020-03-06T00:00:00
2020-03-07T00:00:00

生成距离序列

如果输入文件中包含两列以上的数据,可以使用前两列计算距离,并生成等距序列。在 inc 后分别添加 dmsefMnu 表示距离步长的单位为度,分,秒,米,英尺,公里,英里,海里,英尺。如果为笛卡尔坐标,使用 c 作为距离步长单位。

+e 选项

如果只给定 inc 而从数据中获取最大值和最小值,则 (max - min)/inc 可能不是整数,GMT 讲会自动对 inc 进行一定的调整。如果不想调整 inc ,则可以使用 +e 选项,GMT 会固定最小值,适当调整最大值。

颜色铰链

某些 GMT 动态 CPT 是两个独立的 CPT 合成的,合成位置称为铰链值。铰链两侧的颜色通常会有较大的变化,用于两个不同的方面(例如,陆地和海洋的高程和深度)。一般情况下,颜色的动态变化不受铰链的影响,将整个颜色范围拉伸得到最终的 CPT。但激活铰链值时,CPT 铰链两侧的部分将分别拉伸到所需的范围。铰链分为硬铰链和软铰链,铰链必须通过在 CPT 后追加 +h[hinge] 激活。如果设定的拉伸范围不包括铰链值,则只在 CPT 中选取与范围相关的一半重新采样颜色。

离散 CPT 和连续 CPT

所有的 CPT 都可以拉伸,但只建议使用连续 CPT 在 -T 指定的新节点上采样,如果使用离散 CPT 采样,则会警告,但仍可使用。GMT 这样做的原因是防止重采样原始 CPT 导致混叠。

示例

以 polar CPT 为主 CPT,创建一个范围为 -200 到 200,间距为 25 的离散 CPT

gmt makecpt -Cpolar -T-200/200/25 > colors.cpt

使用默认的 turbo CPT 为主 CPT,创建一个范围为 -2 到 6 的等距 CPT

gmt makecpt -T-2/6 > colors.cpt

在 gebco 的基础上,创建一个适用于 v3206_06.txt 数据文件的 CPT,颜色区间个数为 24 个

gmt makecpt -Cgebco @v3206_06.txt -E24 > my_depths.cpt

创建一个震源深度 CPT 文件,红色表示深度为 0-100 km,绿色表示 100-300 km,蓝色表示 300-1000 km

gmt makecpt -Cred,green,blue -T0,80,300,1000 -N > seis.cpt

创建一个连续 CPT,从 3-10 变化时,颜色从白色过度到蓝色

gmt makecpt -Cwhite,blue -T3/10 > cold.cpt

创建一个 0-500 范围的循环 CPT,如果值范围超过 500 或小于 0,则使用循环后的值,而不是 NaN 对应的颜色

gmt makecpt -Cjet -T0/500 -Ww > wrapped.cpt

创建一个拥有三个类别的分类 CPT,并指定类别名

gmt makecpt -Ccubhelix -T0/2/1 -F+cClouds,Trees,Water > cat.cpt

创建一个拥有 10 个类别的分类 CPT,类别名从 A、B、C 等开始编号

gmt makecpt -Cjet -T0/10/1 -F+cA

使用字符串键值创建一个分类 CPT

gmt makecpt -Ccategorical -Twood,water,gold

相关模块

grd2cpt