提出问题

GMT 中可以用 psxy 绘制多段数据,画出多个闭合的多边形。一个示例命令如下:

gmt psxy input.dat -R0/360/-90/90 -JX15c/10c -Bx60 -By30 -W1p -L > test.ps

本例中的输入数据 input.dat 的内容为:

>
30 20
90 20
90 60
30 60
>
120 10
150 35
180 20
160 -10
130 -30
>
200 10
230 25
240 40
280 5
300 -20

画出来的图效果如下:

现在想要给不同的区域填充不同的颜色,目标效果图如下:

要实现区域填色,有两种方法,分别是使用 -G 选项和使用 -C 选项。

-G 选项

在每段数据的头段记录中加上 -Gcolor 选项以指定当前多边形的填充色。

还是同样的命令,此时输入数据变成:

> -Gred
30 20
90 20
90 60
30 60
> -G0/100/20
120 10
150 35
180 20
160 -10
130 -30
> -G0/0/120
200 10
230 25
240 40
280 5
300 -20

-G 选项设置了第一个多边形填充红色,第二个多边形填充 0/100/20,第三个多边形填充 0/0/120

-C 选项

可以使用 -C 选项指定要使用的 cpt 文件,且每段数据的头段记录中加上 -Zval

下面的命令中使用了增加了 -Carea.cpt 选项:

gmt psxy input.dat -R0/360/-90/90 -JX15c/10c -Bx60 -By30 -W1p -L -Carea.cpt > test.ps

CPT 文件 area.cpt 的内容为:

0   red
1   blue
2   200/0/20
3   0/0/120
4   100/100/100

该 cpt 表明,若 Z 值取零,则填充红色,若 Z 值为 1,则填充蓝色,其他同理。

指定 -C 选项的同时,也需要在数据的头段记录中加上 -Z 选项,以指定每个多边形的填充色:

> -Z0
30 20
90 20
90 60
30 60
> -Z2
120 10
150 35
180 20
160 -10
130 -30
> -Z3
200 10
230 25
240 40
280 5
300 -20

此时,三个多边形的填充色分别是红色、 200/0/200/0/120

说明

上面介绍的两种方法中, -G 选项比较简单,只需要少量的修改即可实现。 -C 选项需要修改的地方较多,但更具有普适性,也更易于编程处理。