GMT 添加断层名
文章目录
在 GMT 中绘制断层很简单,只要有断层的坐标数据,直接用 psxy 即可绘制。
有时不仅要绘制断层,还需要在断层线的旁边加上断层名,最直接的想法是用 pstext 将断层名写上去。使用 pstext 添加断层名时会遇到两个问题:
- text 的位置;
- text 的角度(一般情况下,断层名与断层线平行);
如果只是几条断层的话,可以手动指定并微调 text 的位置和角度,以达到想要的效果。如果要标记的断层名有点多,或者想要批量绘制不同区域的多张断层图,手动微调的方法就有些麻烦了。当然,如果真有需求的话,可以手动微调,建立一个断层名的数据库,以后用起来就方便多了。
直接的想法
为了能够将添加断层名这个事情自动化,就需要解决以上两个问题。对于任意一条断层而言:
- text 的位置可以通过找断层线的中间点得到;
- text 的角度可以通过 text 位置附近的几个点计算切线方向得到;
思路很简单,自己实现起来也不算难。不过,其实 GMT 已经实现了这一功能,直接拿过来用即可。
GMT 的解法
GMT 的 psxy 命令中提供了 - Sq 选项可以用于在绘制线段的同时在线段上添加标注,利用这一选项可以实现给断层标注断层名的目的。
最小示例
下面的例子是实现添加断层名的最小代码,关键在于 - Sq 选项:
n1
表明在线段上只显示一次断层名,当然也可以选择显示多次;:
是一个分界符,不可缺少;+Lh
表明从多段数据的头段中读取 - L 选项作为断层名;- 对于每段数据,在头段记录中都需要使用
-L<label>
来指定断层名;
gmt psxy -R90/130/30/60 -JM15c -B5 -Sqn1:+Lh > map.ps << EOF
> -L"AAA Fault"
95.00 35.00
97.56 37.17
100.27 39.29
103.14 41.34
106.20 43.31
109.45 45.20
112.93 46.99
116.63 48.67
120.00 50.00
> -L"BBB Fault"
95.00 55.00
96.59 54.61
98.16 54.19
99.69 53.76
101.19 53.30
102.65 52.83
104.09 52.34
105.49 51.83
106.86 51.31
108.20 50.77
109.51 50.21
110.00 50.00
EOF
绘图效果如下:
稍复杂的示例
-Sq 有很多子选项,可以对图进行进一步修改,详情参考官方文档。
将上面例子中的 - Sq 选项改成:
-Sqn1:+Lh+f15p,blue+n0c/0.3c
其中:
+f15p,blue
用于修改断层名的字号和颜色+n0c/0.3c
表明将断层名沿着垂直断层的方向偏移 0.3 厘米;
效果如下:
自定义
上图的效果已经很不错了,但是现实情况可能会很复杂,尤其是在断层比较多的时候,可能几个断层名会重叠在一起。此时想要自动判断并调整断层名的位置就比较困难了,所以需要在已有位置的基础上做一些手动的调整。
给上例中的 - Sq 选项中额外加上一个 + T 子选项,即:
-Sqn1:+Lh+f15p,blue+n0c/0.3c+Tfaultname.txt
使用该选项后,会在绘图的同时将每个断层名的信息输出到文件 faultname.txt 中,其格式为:
X Y angle label
对照着画出来的图,手动调整不甚满意的断层名的位置和角度。然后放弃之前的 psxy -Sq
的代码,使用 psxy 绘制断层,pstext 绘制断层名 faultname.txt。
文章作者 SeisMan
上次更新 2015-08-21