✍️ 朱邓达 , 田冬冬 • 📅 2026-01-03

# grdvector

官方文档:

  grdvector

简介:

  根据两个网格文件绘制矢量场

该命令会读取两个 2D 网格文件并绘制矢量场。两个网格文件分别代表 \((x,y)\) 平面内矢量场的 X 分量和 Y 分量，最终矢量场用不同长度和方向的箭头表示。两个网格文件，也可以分别 是极坐标下 \((r,\theta)\) 的分量 （见 `-A` 和 `-Z` ）。

## 语法

gmt grdvector grid1 grid2 `-J` parameters [ `-A` ] [ `-B`[p|s]parameters ] [ `-C`[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),...][+h[hinge]][+i dz][+u|U unit][+s fname] ] [ `-G` fill ] [ `-I`[x]dx[/dy] ] [ `-N` ] [ `-Q` parameters ] [ `-R` region ] [ `-S`[i|l]scale[+c[[slon/]slat]][+s refsize] ] [ `-T` ] [ `-U`[stamp] ] [ `-V`[level] ] [ `-W` pen[+c] ] [ `-X`[a|c|f|r][xshift] ] [ `-Y`[a|c|f|r][yshift] ] [ `-Z` ] [ `-f` flags ] [ `-l` flags ] [ `-p` flags ] [ `-t` transp ] [ --PAR=value ]

## 输入数据

grid1

  矢量场的 X 分量网格文件

grid2

  矢量场的 Y 分量网格文件

两个网格文件顺序很重要，对于 \((x,y)\) ，两个文件分别为 X 分量和 Y 分量。 对于 \((r,\theta)\) ，两个文件分别为大小 \(r\) 和 角度 \(\theta\) ， 其中角度可以是方向角（ `-A` ， 从东向逆时针测量）或方位角（ `-Z` ， 从北向顺时针测量）。

## 必须选项

-J

-J projection

  设置地图投影方式。 (参数详细介绍)

## 可选选项

-A

-A

  输入数据为极坐标表示。即网格文件包含的是 \((r,\theta)\) 分量而不是 \((x,y)\) 分量。 如果 \(\theta\) 表示方位角，请查阅 `-Z`。

-B

-B parameters

  设置底图边框和轴属性。 (参数详细介绍)

-C

-C[section/]master|cpt|color\(_1\),color\(_2\)[,color\(_3\),...][+h[hinge]][+i dz][+u|U unit][+s fname]

  指定主 CPT 名称，CPT 文件或用逗号分割的多个颜色， 以创建一个 CPT。如果不指定参数，则在现代模式下使用当前 CPT（如果可用）。 支持以下多种输入：

  1. 主 CPT 名称，例如 earth （详见 内置CPT ）， 可使用 CPT 名称 master 或包括相对路径的 section/master 来指定（内置 CPT 不可添加 .cpt 扩展名）。

  2. 自定义 CPT 文件 cpt ，例如 my_colors.cpt 。

  3. 自动从多个颜色 color\(_1\),color\(_2\)[,color\(_3\),...] 中创建线性连续的 CPT，其中 z 值从 0 开始， 每添加一种颜色 z 值加 1。在这种情况下， color\(_i\) 可以是 r/g/b (e.g. 255/100/75)， h-s-v (e.g. 180-0.8-1)， c/m/y/k (e.g. 80/50/40/30)，HTML十六进制 (e.g. #aabbcc) 或 颜色名称。逗号之间不能有空格。

  支持以下选项：

  - +h - 对于有软铰链 (soft hinge) 的主 CPT，可指定 hinge 值启用铰链， 而对于有硬铰链 (harde hinge) 的 CPT，可以修改铰链位置 hinge ，但不能禁用。

  - +i - 指定 dz 使网格 z 值范围分层，默认使用精确范围。

  - +s - 将创建的 CPT 保存到文件 fname。当 CPT 是自动创建时这很有用， 但必须用于 `-C` 的末尾。

  - +u - 对于任何其他主 CPT，可以通过指定其原始单位 unit 将其 z 值单位转换为米。

  - +U - 与 +u 类似，但是将 z 值单位从米转换为指定单位 unit 。

-G

-G fill

  设置矢量头填充色 fill （默认不填充）。 fill 也可通过 `-Q` 指定。

-I

-I[x]dx[/dy]

  每隔 dx 和 dy 绘制一个矢量。其中 dx 和 dy 必须是 原始网格间隔的整数倍， dx 和 dy 后加上 m 表示分，加上 s 表示秒。 也可以使用 -Ix multx[/multy] ，此时 multx 和 multy 表示倍数。 默认绘制每个节点上的矢量。

-N

-N

  不裁剪地图边界外的矢量（默认裁剪）。

-Q

-Q parameters

  修改矢量的属性，使用 `-Q` size 指定矢量头的大小 size （默认为 0 ，即仅绘制线条）。 更多矢量属性控制详见 矢量/箭头 一节。

-R

-R xmin/xmax/ymin/ymax[+r][+u unit]

  指定数据范围。 (参数详细介绍)

-S

-S[i|l]scale[+c[[slon/]slat]][+s refsize]

  设置矢量长度的缩放比例 scale 。

  对于笛卡尔数据而言，缩放比例 scale 即单位绘图距离所对应的实际数据的多少。 可以加上 c|i|p 以指定绘图单位，若不指定则使用 PROJ_LENGTH_UNIT 。 通过绘图单位缩放转换的矢量长度将绘制为直线笛卡尔矢量，其长度不受地图投影和坐标位置的影响。 例如 -S5c 表示大小为 5 的矢量在图上为 1 cm。

  对于地理数据而言，缩放比例 scale 表示单位地理距离（见 距离单位 ）所对应的实际数据的多少。 矢量大小（即实际数据）被缩放到给定距离单位中的地理距离，最后投影到地球上以给出绘图距离。 这些是沿着大圆路径的地理矢量，它们的长度可能受到地图投影及坐标的影响。 例如 -S10k 表示大小为 10 的矢量在地图为 1 km。

  - -Si scale - 缩放比例 scale 表示单位实际数据所对应的绘图距离或地理距离。

  - -Sl length - 所有矢量拥有固定的绘图长度 length。

  更详细的解释见 矢量缩放与单位的影响 。

  使用 `-V` 可以报告所有绘制矢量的最小值、最大值和平均值，以及所有绘制矢量的绘制长度。 如果使用 `-l` 自动生成图例，则需要以下一到两个子选项：

  - +c[[slon/]slat] - 控制地图上地理矢量的参考长度。笛卡尔矢量不可用该选项。 参考长度选择在纬度 slat 位置，也可指定经度 slon 作倾斜投影（默认为中央经线）。 如果使用 +c 但无参数，则选择地图中点的矢量长度作为参考长度。

  - +s refsize - 使用实际数据作为矢量的参考大小。例如，选择板块运动速率 25 mm/yr 作为参考，使用 +s25 ，对应 `-l` 指定 `-l`"Velocity (25 mm/yr)"。 如果不指定 refsize ，则默认为上述的 scale 参数。

-T

-T

  该选项意味着笛卡尔数据的方位角会根据 X 和 Y 方向符号而改变（默认不改变）。 这个选项对于坐标反向时很有用，例如 -JX5c/-2.5c ，Y 轴向下为正， 只有使用 `-T` 才能正确处理矢量的方位角，见下方示例。

  `Source Code`

  在正向和反向的 X, Y 方向下，使用 `-T` （蓝线）和不使用 `-T` （红线）的结果。

-U

-U[label][+c][+j just][+o dx/dy]

  在图上绘制GMT时间戳logo。 (参数详细介绍)

-V

-V[level]

  设置 verbose 等级 [w]。 (参数详细介绍)

-W

-W pen[+c]

  设置矢量轮廓的画笔属性。如果加上 +c ，则矢量头颜色和线条由 CPT 指定 （见 `-C` ）。

-X

-Y

-X[a|c|f|r][xshift[u]]

-Y[a|c|f|r][yshift[u]]

  移动绘图原点。 (参数详细介绍)

-Z

-Z

  输入的 \(\theta\) 分量数据表示方位角（正北开始顺时针旋转的角度）而不是方向角（正东开始逆时针旋转的角度）， 使用本选项会自动使用 `-A`。

-f

-f[i|o]colinfo

  显式指定当前输入或输出数据中每一列的数据类型。 (参数详细介绍)

-l

-l[label][+D pen][+G gap][+H header][+L[code/]txt][+N cols][+S size[/height]][+V[pen]][+f font][+g fill][+j just][+o off][+p pen][+s scale][+w width]

  为当前绘制的符号或线段增加一个自动图例记录。 (参数详细介绍)

-p

-p[x|y|z]azim[/elev[/zlevel]][+w lon0/lat0[/z0]][+v x0/y0]

  设置3D透视视角。 (参数详细介绍)

-t

-t[transp]

  设置图层透明度（百分比）。取值范围为0（不透明）到100（全透明）。 (参数详细介绍)

-^ 或 -

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

-+ 或 +

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

-? 或无参数

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

--PAR=value

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

## 距离单位

GMT支持多种不同的距离单位，以及三种不同的球面距离计算方式。 详情见 单位 和 -j 选项。

## 示例

注: 下面是该模块的一些有效语法示例。使用远程文件（文件名以 `@` 开头）的示例可以剪切并粘贴到您的终端中进行测试。其他需要输入文件的命令只是常见的使用类型的虚拟示例，但不能按编写的原样运行。

对矢量长度进行缩放，使得图上1英寸代表实际的10个数据单位:

    gmt grdvector r.nc theta.nc -Jx5c -A -Q0.1i+e+jc -S10i -pdf gradient

绘制地理数据，缩放比例为每个数据单位对应200 km，每隔3个网格点绘制一个矢量:

    gmt grdvector comp_x.nc comp_y.nc -Ix3 -JH0/20c -Q0.1i+e+jc -S200 -pdf globe

## 矢量缩放与单位的影响

使用 `-S` 指定矢量缩放需要仔细思考，因为看起来可能有些反直觉。如 `-S` 中所解释的， 其指定的是每个绘图单位或地理距离单位所对应的实际数据多少。 所选择的绘图或距离单位将影响所选择的矢量类型。通常，程序会首先计算每个节点上矢量的大小 \(r\) （极坐标数据直接提取）。矢量大小可以是任何单位， 这里假设我们的网格记录地球水平磁场的长期变化，单位为 nTesla/year， 在某特定节点上，其值为 28 nTesla/year（在某个方向上）。 如果你指定缩放因子 scale 的单位为绘图单位 c|i|p 则表明你选择了 笛卡尔矢量 。 我们进一步假设你设置了 `-S` 10c ，这表明你希望 10 nTesla/year 的数据对应绘制 1 cm 长度。在程序内部，模块会将该缩放因子转为绘图比例 1/10 = 0.1 每 nTesla/year。对于大小为 28 nTesla/year 的矢量，模块会将其乘以绘图比例， 最终得到图上 2.8 cm 长的矢量。最终不会加入实际数据单位。 如果我们希望在图例中绘制一条 10 nTesla/year 的参考矢量，则其绘制长度 10 x 0.1 = 1 cm ， 因为笛卡尔矢量缩放后的长度是恒定的，不依赖于投影和矢量位置， 即 10 nTesla/year 的矢量在图上各处均为 1 cm。

让我们将这种效果与使用地理距离单位的情况进行对比，假设使用 `-S` 0.5k （0.5 nTesla/year 每千米），这表明你选择了 地理矢量 。 在程序内部，模块会将该缩放因子转为地图比例 2 km 每 nTesta/year。 对于大小为 28 nTesla/year 的矢量，其在地图上的长度为 28 x 2 km = 56 km。 同样，最终不会加入实际数据单位。现在，需要将这 56 km 长的矢量投影到地球上， 而由于地图投影产生的扭曲，56 km 长的矢量长度在绘图上将是地图投影、地图比例和矢量位置的函数。 例如在墨卡托地图上，赤道正东 56 公里的矢量基本等于 0.5 度经度， 但在北纬 60 度，它更像是 1 度经度。 这种影响的结果是，当用户想要在图例中添加 10 nTesla/year 的参考向量时， 就会面临该问题：绘制的长度通常取决于纬度，因此参考比例尺只在对应纬度附近有用。

也可以使用相反的设置， -Si scale 。当提供 scale 倒数更方便时，这个变式很有用。 对于笛卡尔矢量，我们可替换为 -Si 0.1c 表明想绘制 0.1 cm 每 nTesta/year。 同样的，对于地理矢量，我们也可替换为 -Si 2k 表明想绘制 2 km 每 nTesta/year。 随着 -Si 的参数变大，绘制的矢量也变长，而随着 `-S` 的参数变大，绘制的矢量变短。

## 注意

请注意，使用 `-I` 可能会导致混叠，除非网格在新的间隔上平滑变化。 通常最好对网格进行滤波，并以更大的网格间隔重新采样，再使用这些网格而不是原始网格。

## 相关模块

grdcontour, plot