最近在用pstext绘制标注文本时遇到了一个问题,如果在脚本中添加标注的范围超过了脚本第一条指定绘图区域的范围,发现标注无法绘制到图形上,如下图所示:
绘图原意是希望能够在图形的上方为图形添加一个题为“Y=sin(x)+zhanjinggang”的标题。因为该数据的覆盖范围是全球覆盖,因此在指定pstext 的第一和第二个参数时,必须在全球的经纬度范围内,否则标签内容超过范围,无法显示。
为了解决这个问题,找了半天解决方案也没有弄成功,后来发现如果利用文本文件指定标签标题内容,然后再用pstext绘制标题内容的话,可以满足绘图要求(如下图黑色标签所示)。
脚本源码:
del .gmt* gmt.*
REM #set the GMT variable for dots per inch (resolution)
gmtset DOTS_PR_INCH 600
GMTset FRAME_WIDTH 0.03i
gmtset FRAME_PEN 1.50p
gmtset ANNOT_OFFSET_PRIMARY 0.02i
gmtset HEADER_FONT_SIZE 6
gmtset LABEL_FONT_SIZE 6
gmtset ANNOT_FONT_PRIMARY Times-Roman
gmtset ANNOT_FONT_SECONDARY Times-Roman
gmtset HEADER_FONT Times-Roman
gmtset LABEL_FONT Times-Roman
gmtset TICK_LENGTH 0
REM #set the GMT variable for eps paper size Custom_WxH
REM gmtset PAPER_MEDIA Custom_42ix45i
gmtset PS_MEDIA = 10ix12i
set outps=zhenghui.ps
grdreformat 2008-1.grd temp0.grd=nf -V
rem makecpt -Chaxby -T-6/6/1 -D >t.cpt
rem makecpt -Crainbow -T-6/6/1 -Z >t.cpt
grdimage temp0.grd -R0/360/-90/90 -E200 -JQ10i -B60g60/50f50WesN -X0.6i -Y2i -K -V -Ct.cpt >%outps%
pscoast -R -JQ -Di -A10000 -W1p,white -V -K -O -P >>%outps%
rem 通过在脚本中添加标注来绘制到图形中,当标注范围超过图形范围是,无法绘制
echo 120 90 30 0 7 LM y=sin(x)+zhanjingang | pstext -G0/0/255 -R -J -K -O >> %outps%
rem 通过文件读取来绘制绘图区域外的标注
pstext label2.txt -R -J -K -O -N -Gblack -D0.04c >> %outps%
rem 水平色棒
psscale -D5i/-0.2i/9i/0.08ih -E1 -Ct.cpt -I -B2/:@~m@~gal: -O -V -K >>%outps%
rem 垂直色棒
psscale -D10.5i/2.5i/4.1i/0.08i -E1 -Ct.cpt -I -B2/:@~m@~gal: -O -V >>%outps%
echo converting to jpg
ps2raster %outps% -E600 -V -Tj
convert %outps% -density 600 -rotate 90 zhenghui.jpg
pause
总结:如果要在GMT中绘制超过指定的-R范围外的文本标签的话,可以将标签内容写入文件,然后再通过pstext读取文件的方式绘制标签内容。
https://blog.sciencenet.cn/blog-51026-642603.html
上一篇:
【GMT】ps2raster命令设定GMT绘图图片输出格式