绘制震中分布图时经常需要绘制多年地震,并需要将不同年份地震进行区分,而区分的方式通常是给其填充不同的颜色。常规的绘图方法中将每一年的地震目录用awk提出后再绘制,此方对于每年的地震都需要单独一条命令进行绘制,并给其一个单独的颜色。如此一来同样的绘图语句就要重复写好几遍,个人觉得还是有点不方便。
好在gmt的—C<cpt>
模块为我们提供了使用cpt文件给图中元素进行填色的功能,这样的话,只需要做好数据表便可一条命令绘制所有地震,并且使用cpt进行渲染,做到按照发生年份进行区分,同时方便ColorBar形式的时间图例的绘制。
psxy模块下-C选项简介
在psxy
模块中—C<cpt>
选项用于指定CPT文件或颜色列表。该选项后跟一个CPT 文件名,也可以使用-C<color1>,<color2>,...
语法在
命令行上临时构建一个颜色列表,其中
对应Z 值为1 的颜色,依次类推。
- 若绘制符号(即使用
-S
选项),则符号的填充色由数据的第三列 Z 值决定,其
他数据列依次后移一列 - 若绘制线段或多边形(即未使用
-S
选项),则需要在多段数据的头段中指定
-Z<val>
,然后从cpt文件中查找<val>
所对应的颜色,以控制线段或多边
形的线条颜色
下面的例子展示了-C<color1>,<color2>..
用法:
绘制两条不同颜色的线段
1 | gmt psxy -JX10c/10c -R0/10/0/10 -B1 -Cblue,red -W2p > test.ps << EOF |
举个栗子
上例为GMT6-documentation中的例子
下面以绘制2008年以来全球7级以上地震震中分布图为例
bash下绘图代码如下
1 |
|
结果:
地震目录格式如下:
1 | 20181211102630-58.32 -26.387.00150000 南桑威奇群岛地区 |
因此在绘图之前需要对文本格式进行一定的处理,以满足gmt绘图需要。
-
本例子利用for循环加awk实现文本内容的提取和格式的设定,即
经度 纬度 Z值(年份) 震级(大小)
-
makecpt
模块将文件rainbow.cpt
的Z值设置为2008~2019,并且划分间隔为1,生成新的cpt文件; -
因此绘图时使用
-C
选项,会直接读取第三列为填充颜色;并可以绘制colorbar作为图例,省去了繁琐的图例绘制。
¶绘制颜色变化的曲线
想要绘制一条颜色变化的线段,下面是演示代码:
此例引自Seisman播客
1 |
|
结果:
简单解释一下:
makecpt
命令制作了一个 - 2 到 2 间隔为 1 的 CPT 文件psxy
命令中使用了-C
选项,此时需要输入数据是多段表数据,且每段数据的段头记录中,需要有-Z<val>
以指定每段数据的 Z 值- 实际绘图时,对于每段数据,命令会读取该数据数据的段头记录中的
-Z<val>
中的 Z(val
)值,然后到 CPT 文件中查找 Z 值所对应的颜色,作为该段线段的颜色。