c++输入坐标画散点图_Generic Mapping Tools (GMT) 实际使用心得和随笔(1):散点图...

论坛 期权论坛     
选择匿名的用户   2021-5-23 22:50   160   0
<div>
<p></p>
<div style="text-align:center;">
  <img alt="1c220333c66c71bed227b8b008365c9e.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-3a7c2d150822f45a2412e71e71085f45.png">
</div>
<p>Generic Mapping Tools(GMT)是科研工作者常用的画图工具。GMT的功能强大,也内置了一些统计模块。相较于其他常用的绘图工具(或含有绘图功能的软件,比如Matlab,Python,R等),GMT的特点是高效出图,缺点则是没有可操作的直观界面(GUI)。 </p>
<p>我这系列的文章奔着“开袋即食”的理念,直接从实例入手。部分GMT4,5和6的区别,我也会提到。提前说明,文章中,我只会针对实例给出代码,至于如何举一反三,请各位同学自行根据GMT手册研究。</p>
<p>序言:GMT的使用环境</p>
<p>(1)安装</p>
<p>我个人是使用mac作为工作电脑环境,因此安装GMT可以用homebrew、macport等工具简单地进行安装。在终端里输入:</p>
<div class="blockcode">
  <pre class="blockcode"><code>brew install gmt </code></pre>
</div>
<p>或</p>
<div class="blockcode">
  <pre class="blockcode"><code>brew install gmt&#64;5 </code></pre>
</div>
<p>注意homebrew里的GMT包是GMT6的版本。如果要安装GMT5版本,需使用第二条命令。</p>
<p>(2)使用</p>
<p>通常,GMT的代码都需要写在bash之类的批处理用文档里。</p>
<p>比如,本次实例所用代码都可以写入plscatter.sh这样的文件里,然后通过以下命令执行。</p>
<div class="blockcode">
  <pre class="blockcode"><code>sh plscatter.sh</code></pre>
</div>
<p>正文:(1)散点图(Scatter Plot)&#43;拟合 —— 此为GMT5版</p>
<p>先上效果图(数据是我随手选的)。</p>
<p></p>
<div style="text-align:center;">
  <img alt="be6472cb62790387a9d9305889792507.png" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-0676f5c0bd3cd363bd80be03470ed699.png">
</div>
<figcaption>
  图1 含有两个子图和拟合直线的散点图
</figcaption>
<p>这张图上,包含了大部分GMT画散点图所需要用到内容:</p>
<ol><li>绘制子图</li><li>根据数据绘制点并着色。</li><li>绘制颜色尺度</li><li>添加不同字体、颜色的文本和绘制文本框</li><li>上下标等小功能</li></ol>
<p>伸手党可以直接复制走。如果想学习,则可以继续往后看。</p>
<div class="blockcode">
  <pre class="blockcode"><code>#!/bin/bash
# Description: A sample for GMT.
# Author: Zhihu Gadian
#
# output in English
export LANG&#61;C
#########  Personal Settings
#  . ./gmtpar.sh     调用公共设置中,以下为gmtpar.sh的内容。
gmt set PROJ_LENGTH_UNIT INCH
gmt set FONT_TITLE 20
gmt set FONT_ANNOT_PRIMARY 14
gmt set FONT_LABEL 16
gmt set MAP_TICK_PEN thin
gmt set MAP_FRAME_TYPE plain
gmt set MAP_FRAME_PEN thicker
gmt set PS_MEDIA a4
##########  End Personal Settings

range&#61;1800/2400/1800/2400
cptfile&#61;compare.cpt
size&#61;2.8
xanot&#61;a200f100g300
yanot&#61;a200f100g300

in&#61;sample.txt
out&#61;sample.ps

gmt makecpt -Cseis -T0/60/2 -D  -I &gt; $cptfile

########panel 1
gmt psbasemap -R${<!-- -->range} -JX${<!-- -->size} -B${<!-- -->xanot}:&#34;Sample 1 Obs. [m&#64;&#43;2&#64;&#43;]&#34;:/${<!-- -->yanot}:&#34;Sample 1 Model [m&#64;&#43;2&#64;&#43;]&#34;:WSne -X1  -K &gt;  $out
awk  &#39;{if ( $1 !&#61; &#34;#&#34; &amp;&amp; $2 &gt; -900. &amp;&amp; $4 &gt; -900. ) print $2,$4,$1}&#39; $in|
gmt psxy -R -J  -Sc0.04 -C$cptfile -O -K &gt;&gt; $out

awk  &#39;{if ( $1 !&#61; &#34;#&#34; &amp;&amp; $2 &gt; -900. &amp;&amp; $4 &gt; -900. ) print $2,$4}&#39; $in|
gmt regress -Fxm  -T1700/2500/1 &gt; sample1_regressed.txt
awk  &#39;{if ( $1 !&#61; &#34;#&#34; &amp;&amp; $1 &gt; -900. &amp;&amp; $2 &gt; -900. ) print $1,$2}&#39; sample1_regressed.txt |
gmt psxy -R -J  -W0.5 -O -K &gt;&gt; $out

gmt pstext -R -J -N -F&#43;a0&#43;f14p,Helvetica-Bold&#43;jLT  -O -K &gt;&gt; $out &lt;&lt; EOF
1850 2350 a)
EOF
gmt pstext -R -J -N -F&#43;a0&#43;f12p,Times-Italic&#43;jLT -Gwhite -Wthinner  -O -K &gt;&gt; $out &lt;&lt; EOF
2000 1900 &#64;;blue;y &#61; 0.791 x &#43; 481.469&#64;;;
EOF


########panel 2
gmt psbasemap -R${<!-- -->range} -JX${<!-- -->size} -B${<!-- -->xanot}:&#34;&#64;~D&#64;~Sample 2&#64;-Obs.&#64;- [m&#64;&#43;-2&#64;&#43;]&#34;:/${<!-- -->yanot}:&#34;&#64;~D&#64;~Sample 2&#64;-model&#64;- [m&#64;&#43;-2&#64;&#43;]&#34;:WSne -X4  -O -K &gt;&gt;  $out
awk  &#39;{if ( $1 !&#61; &#34;#&#34; &amp;&amp; $3 &gt; -900. &amp;&amp; $5 &gt; -900.) print $3,$5,$1}&#39; $in|
gmt psxy -R -J  -Sc0.04 -C$cptfile -O -K &gt;&gt; $out

awk  &#39;{if ( $1 !&#61; &#34;#&#34; &amp;&amp; $3 &gt; -900. &amp;&amp; $5 &gt; -900. ) print $3,$5}&#39; $in|
gmt regress -Fxm  -T1700/2500/1  &gt; sample2_regressed.txt
awk  &#39;{if ( $1 !&#61; &#34;#&#34; &amp;&amp; $1 &gt; -900. &amp;&amp; $2 &gt; -900. ) print $1,$2}&#39; sample2_regressed.txt |
gmt psxy -R -J  -W0.5 -O -K &gt;&gt; $out
gmt pstext -R -J -N -F&#43;a0&#43;f14p,Helvetica-Bold&#43;jLT -O -K &gt;&gt; $out &lt;&lt; EOF
1850 2350 b)
EOF
gmt pstext -R -J -N -F&#43;a0&#43;f12p,Times-Italic&#43;jLT -Gwhite -Wthinner  -O -K &gt;&gt; $out &lt;&
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP