✍️ 陈箫翰

等间隔数据网格化绘图

在实际科研工作中,经常会通过程序计算产出科研数据。一类常见的数据形式就是在经度和纬度方向上(或是笛卡尔座标系中X和Y方向)等间隔分布的数据。 本章我们讨论其中最简单的一种类型:存储为ASCII文本文件的 x,y,z 值数据。这类数据每一行是一个数据点,前两列为座标,第三列是数值。 在两个方向上,数据点分别都是等间隔分布的。但经度方向(X方向)和纬度方向(Y方向)的间隔可以不一样。 例如经度方向数据点间隔是5弧分,纬度方向数据点间隔可以是3弧分。

以下是数据格式的一个简单示例,该数据是夏威夷区域的GEOID数据。 示例数据下载 HI_geoid_04.xyz

# 笛卡尔座标系:X座标 Y座标 Z值
# 地理座标系:经度 纬度 数值

# 经纬度方向数据点的间隔都是5弧分,即0.083333..度
# 数据点先沿经度方向排列
195             25  1.88000011444
195.083333333   25  1.88100004196
195.166666667   25  1.87800014019
195.25          25  1.87800014019
...

获取数据基本信息

用户可以使用 info 模块获取数据各列的极值信息,便于接下来的作图:

$ gmt info HI_geoid_04.xyz 
HI_geoid_04.xyz: N = 15385      <195/210>       <18/25> <-0.516000032425/14.9390010834>

从输出中可以看到,文件共有15385行,以及三列数据的数据范围。

数据网格化并绘图

等间隔数据使用 xyz2grd 模块转化为 grid 网格文件,并使用 grdimage 模块读取网格文件绘制图片。

R=195/210/18/25

gmt begin map
    gmt xyz2grd HI_geoid_04.xyz -R${R} -I5m -GHI_geoid_04.grd

    gmt basemap -R${R} -JM15c -Baf
    gmt makecpt -Cturbo -T-1/15
    gmt grdimage HI_geoid_04.grd
    gmt colorbar -Bxaf+l"GEOID (m)"

    rm HI_geoid_04.grd
gmt end show
../../_images/95ad680ef9957e2a0a1a826332e88925.png

前面获取的数据范围信息帮助我们确定了 -R 选项的参数,以及 makecpt-T 选项的参数。 我们假定数据由用户自己计算生成,因此知道数据点的间隔。用户需要使用 xyz2grd 中的 -I 选项告诉GMT数据点的间隔。 示例数据中经纬度方向的数据点间隔都是5弧分,因此可以简化设置为 -I5m 。假如两个方向的数据点间隔不同,则需要分别设置(例如 -I5m/3m )。

此外, xyz2grd 模块使用的 -R 选项范围可以与数据范围不同,也可以和作图范围不同。 下面的例子中,我们使用了一个更小的 -R 对数据进行网格化,相当于只选取一部分数据。

R1=202/204/20/22
R2=195/210/18/25

gmt begin map2
    gmt xyz2grd HI_geoid_04.xyz -R${R1} -I5m -GHI_geoid_04.grd

    gmt basemap -R${R2} -JM15c -Baf
    gmt coast -G244/243/239 -S167/194/223
    gmt makecpt -Crainbow -T-1/15
    gmt grdimage HI_geoid_04.grd -Q
    gmt coast -W1p
    gmt colorbar -DJRM+o1c/0+e+mc -Bx2+l"GEOID (m)"

    rm HI_geoid_04.grd
gmt end show
../../_images/262f887fec17280d9289be75d553b6ca.png

如果用户的数据中有一部分区域是缺失的,那么默认情况下缺失数据的区域会被填充为灰色。 可以使用 grdimage 模块中的 -Q 选项令缺失数据的区域透明化。