收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

[Generic Mapping Tools (GMT)] Generic Mapping Tools (GMT) 使用心得和随笔(1.5):散点图之 GMT...

[复制链接]
在前一篇文章中,我们介绍了使用gmt5绘制散点图的过程。大多数代码基于gmt5结构。在新版GMT中,引入了现代模式,因此我们可以更轻松地编写代码。
在本文中,我们仍然以第一篇文章中的散点图为例,重点讨论gmt5和gmt6之间的差异。
正文:(1.5)散点图(Scatter Plot)+拟合 —— GMT6版
依然是先上效果图。
. ~0 x4 x! I% g
                               
登录/注册后可看大图
; l" \- h) k+ T1 z7 n3 p: U/ z
代码如下:
游客,如果您要查看本帖隐藏内容请回复
& k' K( j- Q6 j; o. D9 m
在GMT6中,非常重要的改变有两个:
  • 所有绘图以gmt begin开始,gmt end为止
  • 同一张图中,部分重复指令可以省略/ Q' b$ k9 J, p! L/ w6 ]" x% d
此外,GMT6还引入了subplot功能,可以方便地绘制子图并调整位置大小。下面,我们开始一一分析。
  • 开始绘图
    ' q4 a+ a! M3 t% X
gmt begin sample_subplot jpeg,pdf' J" T4 f2 v; b+ o
与GMT5相比,GMT6开始绘图必须以‘gmt begin’开始。其次,绘图的输出格式可以直接指定。在上述代码中,我们的输出文件名为sample_subplot,并且同时输出了两种格式jpeg和PDF格式。
游客,如果您要查看本帖隐藏内容请回复
1 F1 ?8 |  m- N% d
之后,我们设定了子图标签的字体和大小,以及颜色条。因为图中的颜色条是公用的,所以我们直接在开始子图前就进行了设置。如果需要不同图使用不同颜色条,则可以分别设置。
此外,这里还有一个关键改变。GMT6的颜色条无需写入一个特定文件(如,之前我们在GMT5篇中设置的compare.cpt)。
  • 定义子图排版布局
    5 z& J8 B  z& ^% b8 F+ S+ a1 k
gmt subplot begin 1x2 -Fs$size -A+jTL+o0.2/0.2 -M0.25% c/ U# E6 J4 V5 X3 H4 m
绘制子图,可以通过这条命令来决定整个图片的布局。
gmt subplot begin : 开始绘制子图
1x2: 表示 一行两列。类似地,3x2则表示三行两列。
-Fs$size:表示对每张子图单独设置大小为2.8英寸 (size=2.8 )。而如果换成-Ff$size,则表示整张图的大小为2.8英寸。 注:我们上面定义过默认单位为英寸。
-A:添加自动标签,默认格式是a),b),c)...。
+jTL表示标签定位的锚点在左(L)上(T)
+o0.2/0.2表示对标签的x,y坐标分别进行0.2英寸的微调。
-M0.25:表示每张子图之间的距离为0.25英寸。
以上,我们可以发现,在GMT6中只需简单一行命令,就完成了整张图的排版布局。而在,GMT5中,我们需要不断的对-X,-Y分别调试,来达到最好的排版布局。
  • 绘制子图16 T" B2 d, K2 I4 ?2 }, n
$ H9 U& }! U5 B1 j' n4 H; i$ ^/ I) h
游客,如果您要查看本帖隐藏内容请回复

6 S5 I( ?: J9 a; H% q" ?- R2 q- k
除了第一行的gmt subplot set 0之外,GMT6的命令与GMT5没有本质区别。这条命令表示以下的绘图命令都在第0号图中进行,即第一张子图中。GMT6中的子图编号,是从0开始,并定位在整幅图的左上。而编号默认是按照先行后列增加的(可以+v修改为先列后行,详见手册)。比如3x2的布局中,0、1、2三张图分别是第一行的左中右,而3、4、5则是第二行。
而在第二行命令里,我们绘制底图所用的psbasemap命令,在GMT6中,简化了拼写,去掉了'ps'这两个字母。在选项中,也有一些变化,列举如下:
  • -JX? : 这里的问号表示让GMT根据之前-R范围和我们在上面定义的子图大小自行计算。这里省去了许多麻烦,保证了每张子图的大小比例都是一样的。 不写问号,则可自行定义每张子图的大小。这在需要绘制不同大小子图时,会用到。
  • -B: 之前的文章中,我们使用的是GMT4的老写法。这里,我就改成了GMT5开始的新写法。其意义首先是,x/y和WSNE之类的设置,可以分别定义。对比见下。
  • -X -K > $out 等命令的消失: 这些命令都被gmt begin/gmt end带来的模块化结构所取代了,所以不再需要。
      B; ]& @) U- ]) F) T6 e7 S
GMT4: -Ba200f100g300:"ABC":/a500f100g300:"ABC":WSneGMT5/GMT6: -Bpx200f100g300+l"ABC"  -Bpy500f100g300+l"ABC"  -BWSne #本质上,命令的易读性增加了。/ {" U  M( n. ~$ t; r+ s" E
  • 子图中画点和线6 B: R; J) a8 v: z. ]3 k! ?# d6 U
gmt plot -Sc0.04 -C
, h1 [9 L, ?# ]. B# M' |
除却与之前意义的awk判断句式,在GMT6画点的命令简化了许多。我们把各个版本的命令对比以下:
游客,如果您要查看本帖隐藏内容请回复
/ n: w& e# @1 i" z3 _) \" |9 Q
我们发现,psxy被plot所取代,而且GMT6省略了-R、-J、-O、-K、>> $out等选项以外,还省略了颜色条的配置文件。这是因为GMT6可以自动选择之前makecpt生成的颜色条配置,无需再指定了。
类似地,画线也进行了简化。
游客,如果您要查看本帖隐藏内容请回复

# O' q( e1 q: Y# z
  • 子图中绘制文字
    7 ?/ H4 ~5 T8 r# A" c
GMT6与GMT5的文字绘制格式是一样的,仅仅对-R、-J、-O、-K、>> $out等选项进行了省略,而pstext变成了text。
之前,我们的子图标签是用pstext进行绘制的,而如今则是自动添加(subplot begin 中的-A选项)。
  • 子图2的绘制
    2 T! j' [/ d3 t2 F& ^
gmt subplot set 1, _' Y3 W6 ~4 E4 b8 D% H9 `  I
经过了布局排版,画新的子图仅仅需要这样的简单命令。它表示在它之后的命令都用于第二子图(编号1)。
  • 颜色条的绘制
      V/ R; b: w. e$ p$ Z6 E9 M) K
gmt colorbar -DJMR+v+ef -C -Bx+l"Depth" -By+l"m" -Np -B20% u7 z4 S6 W) i( i/ r
颜色条的绘制与GMT5类似,仅仅是命令名从psscale改为了colorbar。
  • 绘图结束- @6 B: x: _% Y0 I! s: N  R" z
gmt subplot end #结束子图gmt end  #结束所有绘图
( S- p" n. C7 I8 v
类似于其他编程语言,有begin,就要有end。

4 q7 n4 I& d3 L/ |4 w
  • 小结:
    6 R! N, M1 K' l1 Z* r! Z8 t+ A3 [
在本文中,我们只是在第一篇文章中升级了散点图。一般来说,与gmt4和gmt5相比,gmt6消除了重复的无用命令,大大简化了图像转换和多图像设置问题。因此,我最近也升级到了gmt6。
注意:升级到gmt6后,尽管gmt5兼容代码仍在继续(gmt4部分兼容,需要在每个命令之前添加GMT),但gmt4和gmt5兼容格式不再同时出现。出现以下错误:
basemap [ERROR]: Syntax error -B option: Mixing of GMT 4 and 5 level syntax is not possible

# \; e. B! R4 V; T8 h  W8 o( Z3 [% z
下期预告:地图绘制,色块和等值线的绘制。
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
fdfdfdff
活跃在2022-11-6
快速回复 返回顶部 返回列表