✍️ 陈箫翰 • 📅 2022-10-26

# 绘制颜色渐变的线段

绘制颜色渐变的线段，需要使用 `gmt convert` 进行数据处理，之后再使用 `gmt plot -Sv+s -W+cl -C` 绘图。

假设有一个飞机飞行跟踪数据，格式如下:

    # 经度 纬度 高度
    10.016 49.5493 18825
    10.0032 49.5554 18700
    10.0032 49.5554 18575
    9.98304 49.5649 18531
    9.97812 49.5673 18425
    ...

示例数据下载： `data.txt`

我们首先使用 `gmt convert` 命令将其变换为矢量格式:

    gmt convert data.txt -Fv -o0:4

选项 `-Fv` 将原始的三列数据变换为向量起点终点格式:

    # 原始数据的xyz值    原始数据里下一个点的xyz值
    10.016  49.5493 18825   10.0032 49.5554 18700
    10.0032 49.5554 18700   10.0032 49.5554 18575
    10.0032 49.5554 18575   9.98304 49.5649 18531
    ...

我们只需要前5列数据进行绘图，选项 `-o0:4` 即为只保留前5列输出:

    # 原始数据的xyz值    原始数据里下一个点的xy值
    10.016  49.5493 18825   10.0032 49.5554
    10.0032 49.5554 18700   10.0032 49.5554
    10.0032 49.5554 18575   9.98304 49.5649
    ...

经过处理，这样格式的数据就可以使用 `gmt plot -Sv+s` ，将每一行的两个点连接起来绘制出线段。 而 `-W+cl` 选项则利用第三列的z值，将每一小段的颜色由CPT文件控制。

示例代码如下：

    gmt begin ex006
        # 绘制底图
        gmt basemap -R7.5/10.5/49/50.5 -JM10c -Baf

        # 将原始数据处理为需要的格式
        gmt convert data.txt -Fv -o0:4 > trackv.txt
        # 根据飞行的高度范围生成cpt
        gmt makecpt -T0/20000/1 -Z -Cseis
        # 根据飞行高度，绘制颜色渐变的线段
        gmt plot trackv.txt -Sv1p+s -W2p+cl -C

        rm trackv.txt
    gmt end show

## 参考链接

https://forum.generic-mapping-tools.org/t/how-to-color-line-segments-according-z-value/2832/7