GMT from 4 to 6 SUPPLY
Contents
接着之前一篇博客 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 begin
与gmt end
之间,而非绘图命令可以放在任何地方 -
去掉
-K
,-O
,-P
,>
,>>
以及PS
文件名 -
去掉多余的
-J
,-R
选项 -
所有绘图命令以
gmt
开头,比如gmt coast
。命令前加 gmt,看起来多此一举。其实在 GMT4 中的这些命令均对应一个可执行文件,相当于系统下的一个独立命令。在 GMT5 之后,之前所有的命令都变成了 gmt 命令的模块,所有命令都以 gmt module options 的形式调用 -
以
ps
开头的gmt
命令,省略ps
,比如pscoast
改为coast
,pstext
改为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. 补充
-
Vscode
(Visual Studio Code),可以实现 GMT 脚本高亮等功能,详情见 GMT脚本执行利器—VS Code .
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
Author Qiang
LastMod 2020-03-21