接着之前一篇博客 GMT from 4 to 6,继续记录本人在 ubuntu 系统下从 GMT4 迁移到 GMT6 现代模式的学习过程。

1. 脚本修改

前一篇博客已经介绍了 GMT6 的命令:

$ gmt coast -Rg -JH15c -Gpurple -Baf -png GMT6_modern

但如果两条命令及以上,就需要脚本实现,将上条命令改为 GMT6 脚本:

gmt begin GMT_modern png
    gmt coast -Rg -JH15c -Gpurple -Baf -png GMT6_modern
gmt end show

将 GMT4 风格大脚本修改为 GMT6 现代模式,有以下基本规则:

  • 脚本以 gmt begin figurename (Figuretype) 开头,以 gmt end show 结束

  • 所有的绘图命令都放在 gmt begingmt end 之间,而非绘图命令可以放在任何地方

  • 去掉 -K, -O, -P, >, >> 以及 PS 文件名

  • 去掉多余的 -J, -R 选项

  • 所有绘图命令以 gmt 开头,比如 gmt coast。命令前加 gmt,看起来多此一举。其实在 GMT4 中的这些命令均对应一个可执行文件,相当于系统下的一个独立命令。在 GMT5 之后,之前所有的命令都变成了 gmt 命令的模块,所有命令都以 gmt module options 的形式调用

  • ps 开头的 gmt 命令,省略 ps,比如 pscoast 改为 coastpstext 改为 text

  • 支持同一个选项多次出现,比如 -Bxafg -Byafg -Bzafg -B+t"xx"-N1/1p -N2/2/0.2p

  • psxy 模块由 plot 模块代替。新增了 -L 选项将线段首尾相接;-A选项地理投影下用直线连接两点

  • text 模块必须输入参数由 7 个变为 3 个( X,Y 坐标及文字),其他由 -F 选项控制,比如 -F+f16p,1,red+a30+jTL 表示文字大小 16p, 1 号字体,红色,逆时针旋转 30 度,左上角对齐方式; -D 选项设置额外的偏移量

  • psscale 模块由 colorbar 代替。支持缺省,单个 gmt colorbar 命令可自动生成 Colorbar

  • 其他细节部分:

-R 选项: -RCN, 指定绘图范围为中国 (CN) 。自动根据国家代码确定该国家的区域范围并用于绘图
         -RCN+R2,在中国范围外扩大 2 度

-B 选项: -Bafg之后支持缺省值;
         -B+t"Title Name",+t 为 -B 选项的子选项,添加标题
         -Bxafg, 设置 X 轴; -By, 设置 Y 轴
         -B+l"X Label",为 X 轴添加标签

-L 选项: 添加比例尺,-Lg-60/25+c25+w1000k+f+u 表示比例尺画在西经 60 度,北纬 25 度,
         绘制北纬 25 度处的比例尺,比例尺表示长度为 1000 km,风格为 fancy (铁轨),显示单位

2. 新增功能

新增了部分选项,以 coast 命令为例说明:

  • coast -A 选项,设置绘图的所有对象的最小面积,比如 -A2000 表示绘制所有大于 2000 平方千米的对象
  • coast -C 选项,设置湖泊的颜色,缺省情况下由 -S 选项设置
  • coast -E 选项,调用 DCW (Digital Chaet of the World), 世界数字图表,包含七大洲的洲界,250个国家或地区的边界,8个国家的省(州)界
  • coast -t 选项,设置图层透明度

$ gmt coast -E+l # 查看国家代码列表
$ gmt coast -E+L # 查看省代码,中国的省代码是数字,和居民身份证前两位相同

# 绘制亚洲地区,亚洲边界用灰色表示,中国边界用红色表示,甘肃边界用黑色(默认)表示
# DCW 数据提供的中国边界有误!
$ gmt coast -JM12c -R=AS -E=AS+p0.2p,gray -ECN+p0.3p,red -ECN.62+p0.2p -png As_China_GS
  • 图中图模式,inset 模块。使用 inset begin 进入图中图模式,绘图原点移动至左下角。使用 inset end 结束图中图模式,原点自动还原到原来的位置,所有参数设置将回到原来的状态。小图的位置和大小由 -D-F 选项控制

  • 子图模式,subplot 模块,详情见 https://docs.gmt-china.org/6.0/module/subplot/ . 本人尝试后发现对不规则子图模式,并不是非常友好,对-R, -J 选项会混乱,排版我仍旧需要 -X, -Y 选项

  • 三维坐标轴,-R 选项有 6 个数字,再添加 -J 选项指定 Z 轴投影方式,-B 选项通过 -Bz 设置 Z 轴,-BZ+b 表示绘制一条 Z 轴,-p130/30, -p 指定三维视角,130 和 30 分别为三维视角的方位角 (0-360) 和高度角 (0-90)

  • 添加图例,plot -l"label" 可自动在右上角添加图例;模块 legend 绘制更复杂的图例,详见 https://docs.gmt-china.org/6.0/module/legend/ . 本人尝试后发现该功能不是非常友好,如果脚本还没结束,会自动到添加其他位置

3. 示例

根据上述总结的信息,现将以前的 GMT4 C shell 脚本改为 GMT6 C shell 脚本。

GMT4 脚本请点击 GMT4.csh 查看。生成的图片:

GMT6 脚本

#!/bin/csh
set energy_file = mkrup_sm_CBP.out_calibrated
set ptime = 115
set duration=100
gmt begin Rupture_6 png
  gmt set FONT Times-Roman MAP_FRAME_TYPE plain FONT_LABEL 15p
####### Subplot number
  gmt text -JX10c/10c -R0/10/0/10 -F+f15p,7 -N  << EOF
-1.5 16 (a)
18.5 16 (b)
18.5 6  (c) 
EOF
###### (a) Rupture process
  set cptfile=color.cpt
### basemap
  gmt coast -R119/122/-2/1 -JM15c -Ba1 -I1 -SLIGHTCYAN -GBEIGE -Na -Dh -W0.02/150 \
      -Lg119.5/-1.5+c-2+w50+f+ukm -TdjTR+o0.5c/0.5c+f+w0.6i+l --FONT_TITLE=10p --MAP_TITLE_OFFSET=0.05i
### insert map
  gmt inset begin -DjTL+w5c/4c+o0.03c/-0.1c
    gmt coast -R100/140/-10/20 -Na -Bes -Swhite -Ggray
    echo 119.86 -0.18 | gmt plot -Sa0.5c -Wblack -Gred
  gmt inset end
### rupture source
  awk '{if($4-'$ptime' < '$duration' ) print $1,$2,$4-'$ptime',($3)^1.5}' $energy_file | \
  gmt plot -Wblack -C$cptfile -Sc
### focal mechanism
  echo "119.86 -0.18 12 -0.48 0.76 -0.27 -1.45 -0.87 -2.19 27 119.86 -0.18" | \
  gmt meca -Sm0.4c/12p/2c/15c -Gred -T0 -C0.02c/150
### make cpt
  makecpt -Crainbow -T0/$duration/1 -Z > $cptfile
### colorbar
  gmt colorbar -C$cptfile -Ba20+l"Time/s" -DjMR+w6.0c/0.2c+o1.5c/-2c
###### (c) Epicentral distance with time
### basemap
  gmt basemap -JX16c/5.0c -R0/$duration/0/150 -Bxa20f5+l"Time (s)" -Bya50f10+l"Epicentral distance (km)" -BSW -X20c 
### rupture source
  awk '{print $4-'$ptime',$5,($3)^2}' $energy_file | gmt plot -Wthinnest,gray -Sc -Gblack
### speed reference line
  gmt plot -W0.5p,gray << EOF
>
0 0
100 100
>
0 0
100 200
>
0 0
100 400
EOF
  gmt text -F+f15p,gray20,4 -N  << EOF
100 100 1 km/s
75  150 2 km/s
37  150 4 km/s
EOF
###### (b) Normalized amplitude with time
### basemap
  gmt basemap -JX16c/5c -R0/$duration/0/1 -Bxa20f5+l"Time (s)" -Bya0.2f0.05+l"Normalized Amplitude" -BSW -Y10c
### normalized amplitude
  awk '{print $4-'$ptime',$3}' $energy_file | gmt plot -St0.3c -Gblue -Wblack -l'Rupture source'
### arrow
  echo 57.7 0.4 -90 1.5 | gmt plot -Sv0.06c/0.3c/0.15c -Gred -l'Source duration'
gmt end show

生成的图片如下:

4. 补充

Ubuntu Vscode 安装:
$ wget https://go.microsoft.com/fwlink/?LinkID=760868
$ sudo dpkg -i code_1.43.0-1583783132_amd64.deb       # 注意安装包路径及名称
$ sudo apt-get install -f                             # 安装依赖包
$ code test.txt                                       # 终端打开文件
  • 脚本每行前加 4 个空格: awk '{print " "$0}' GMT6.csh >> GMT6_blog