✍️ 菲林可乐 , 李水平 , 陈箫翰 • 📅 2024-12-12

# 绘制三维有限断层模型

使用 GMT 绘制有限断层模型的关键，是利用 `plot3d -C -L` 命令选项绘制一个个小多边形并填充颜色。 这就要求用户在绘图之前必须以特定的格式准备数据。以绘制三维有限断层模型为例，用户必须准备好如下格式的多段数据:

    # 数据头段
    >  -Z1.800000e-01
     # 经度 纬度 深度
     99.3785  34.5324  -0.0010
     99.3574  34.5279  -0.0010
     99.3569  34.5297  -1.9900
     99.3779  34.5342  -1.9900
    >  -Z5.000000e-02
     99.3574  34.5279  -0.0010
     99.3363  34.5233  -0.0010
     99.3358  34.5252  -1.9900
     99.3569  34.5297  -1.9900
    ...

不同小多边形的数据以 `>` 符号分开，每段数据给出这个小多边形的所有顶点坐标，按顺时针或逆时针顺序排列。 `>` 符号后面以 `-Z` 选项给出这个小多边形对应的 Z 值。绘图时将根据这个 Z 值对多边形填充不同的颜色。 这种多段数据格式的详细说明请参考 数据段头记录中的额外属性 。

有些三维有限断层反演程序给出的不是以上格式的数据，而是给出每一个小矩形中心坐标、矩形长宽、走向倾向倾角。例如:

         lat_deg     lon_deg    depth_km   length_km    width_km  slp_strk_m  slp_ddip_m    slp_am_m  strike_deg     dip_deg    rake_deg sig_stk_MPa sig_ddi_MPa sig_nrm_MPa
         34.7982     97.5406      0.8874      1.9546      1.8890      0.2690     -0.3206      0.4186    102.8566     69.9500     50.0000      1.7759     -1.5403      0.2174
         34.7925     97.5389      2.6611      1.9548      1.8890      0.2156     -0.2569      0.3354    102.8566     69.8445     50.0000      0.8002     -0.7488      0.0076
         34.7868     97.5372      4.4338      1.9549      1.8890      0.2255     -0.2688      0.3508    102.8567     69.7391     50.0000      0.7526     -0.8695     -0.0233
    ...

对于这种数据可以参考 plotting_3D_FFM 进行转换。

下面的示例展示了如何基于以上方法绘制三维有限断层模型。

断层示例数据下载： `slip_3dgrid.gmt`

    #!/usr/bin/env bash
    #
    # 绘制三维有限断层模型

    gmt begin 3d_faultslip
        gmt set MAP_FRAME_TYPE plain #设置边框类型
        gmt set MAP_GRID_PEN 0p,gray,- #设置网格线

        gmt basemap -R97.3/99.5/34.3/35/-25/0 -JX15c/10c -JZ5c -Bxa0.25fg -Bya0.25fg -Bza10fg+l"Depth (km)" -BwSEnZ -p160/20
        # 为滑移位错量制作 CPT。滑移位错量最小值为 0， 最大值为 5.5
        gmt makecpt -Cwhite,lightblue,yellow,red -T0/5.5/0.2 -Z
        # 绘制有限断层模型
        gmt plot3d slip_3dgrid.gmt -C -L -W0p,gray -p

        # 绘制 colorbar
        gmt set FONT_ANNOT_PRIMARY 7p FONT_LABEL 8p
        gmt set MAP_ANNOT_OFFSET_PRIMARY 2p MAP_FRAME_PEN thinner MAP_TICK_LENGTH 2p
        gmt colorbar -C -DjBL+w2.5c/0.3c+h+o1.3c/2c+ml -Ba1 -Bx+l"slip(cm)"
    gmt end show