5.1 ASCII表

5.1.1 ASCII表简介

ASCII表是最常见的数据形式,可以用编辑器直接编辑。ASCII表常用于表示点或线。表数据中有N行M列,每行称为一个记录,每列称为一个字段。一个记录内的字段之间用空格、制表符、逗号或分号分隔。每个字段可以是整数(12)、浮点数(20.34)、地理坐标(12:23:44.5W)、绝对时间(2010-10-20T10:30:53.250)、相对时间(30t)。同时,GMT还可以处理大多数CVS(Comma-Separated Values)文件,包括被双引号扩起来的数字。

例如:

# This is a comment line
# lon      lat  evdp
# This is another comment line
133.949  34.219  20
133.528  34.676  15
130.233  33.410  43
135.133  35.313  35
131.377  34.398  22
132.792  34.457  34
133.620  34.936  6
131.101  32.811  23
129.435  33.212  55
133.144  33.647  67

记录中以 # 开头的行,即第一列是 # 的记录,会被当做注释行直接忽略,不算在N个记录之内。所以这个ASCII表可以认为有10行3列,三列数据分别代表经度、纬度和深度。

不同的模块和选项的组合会对数据的列数以及每列的含义都有不同的定义,因而需要根据具体情况去准备数据。准备数据的过程中可能会用到GMT的 -i-o 选项以及 gawk 等工具。

在输出ASCII 表时,字段之间默认用 TAB 键分隔,可以通过修改 IO_COL_SEPARATOR 来设置字段的分隔符,

5.1.2 文件头记录

在第一个记录前,可以有一个或多个与数据无关的记录,称为文件头记录(file header records)。

记录中以 # 开头的行都被当做注释忽略,所以不算是文件头记录。其他不以 # 开头但与数据无关的行,则是文件头记录。可以使用 -h 选项 选项或设置参数 IO_N_HEADER_RECS 跳过这些文件头记录。

下面的ASCII表有一个文件头记录,可以使用 -h1 选项跳过该文件头段记录:

# This is a comment line
# lon      lat  evdp
# This is another comment line
2015-01-05 10:20:30.456 15 45 60 6.0
133.949  34.219  20
133.528  34.676  15
130.233  33.410  43
135.133  35.313  35
131.377  34.398  22
132.792  34.457  34
133.620  34.936  6
131.101  32.811  23
129.435  33.212  55
133.144  33.647  67

5.1.3 多段数据

以绘制断层为例,在绘制断层的时候,可以将每条断层线的经纬度信息分别放在单独的文件中。但当断层数量很多时,这样做会导致目录下有太多数据文件而混乱不堪。为了解决类似的问题,GMT引入了多段数据的概念。

多段数据,顾名思义,就是一个文件中包含了多个数据段。为了区分每个数据段,需要在每段数据的开头加上一个额外的数据段头记录(segment header records)来标记一段新数据的开始。

数据段头记录总是以某个特定的字符作为开头,GMT默认的段头记录的标识符为 >,即所有以 > 开头的行都会被认为是一个段头记录,其标志着新一段数据的开始。

下面是一个包含两个数据段的多段数据,每段数据分别构成一个多边形:

>
10  20
15  30
5   25
>
20  20
35  30
40  40
35  40

可以使用如下命令绘制上面的多段文件:

gmt psxy input.dat -JX10c -R0/50/0/50 -Baf -W1p -Gred -P > lines.ps

用户可以通过设置 IO_SEGMENT_MARKER 将段头记录的标识符修改为任意字符,例如 @%等。

IO_SEGMENT_MARKER 可以取两个特殊的值:

  • B 表示用空行作为数据段的分隔符
  • N 表示用一个所有列都是NaN的记录作为数据段分隔符

5.1.4 数据段头记录中的额外属性

数据段头记录不仅用于标记数据段的开始,还可以额外指定该段数据的其他属性。比如在绘制线段时,可以在段头记录中加上如下一系列选项,以分别控制每段线段的属性:

  • -W 指定当前数据段的画笔颜色
  • -G 指定当前数据段的填充色
  • -Z 设置当前数据对应的Z值,并从CPT文件中获取Z值对应的颜色
  • -L 设置当前数据段的标签信息
  • -T 设置当前数据段的一般描述信息
  • -Ph 表明当前数据段构成的闭合多边形位于另一个闭合多边形的内部

下面的多段数据,分别设置两段数据拥有不同的画笔颜色和填充色:

> -W2p,red -Glightred
10  20
15  30
12  25
> -W2p,blue -Glightblue
22  20
30  30
40  50
35  44

可以使用如下命令绘制上面的多段数据:

gmt psxy input.dat -JX10c -R0/50/0/50 -Baf -W1p -Gred -P > map.ps

查看绘图结果可以发现,数据段头记录中的选项参数会覆盖命令行中相应选项的值。