---
author: 陈箫翰
---

#  等间隔数据网格化绘图

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

以下是数据格式的一个简单示例，该数据是夏威夷区域的GEOID数据。
示例数据下载 {download}`HI_geoid_04.xyz </tutorial/xyz2grd/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
...
```

## 获取数据基本信息

用户可以使用 {doc}`/module/info` 模块获取数据各列的极值信息，便于接下来的作图：

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

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

## 数据网格化并绘图

等间隔数据使用 {doc}`/module/xyz2grd` 模块转化为 *grid* 网格文件，并使用 {doc}`/module/grdimage` 模块读取网格文件绘制图片。

```{eval-rst}
.. gmtplot:: xyz2grd_ex1.sh
    :width: 80%
```

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

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

```{eval-rst}
.. gmtplot:: xyz2grd_ex2.sh
    :width: 80%
```

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