- 积分
- 7063
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-3-11
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 普鲁斯特 于 2017-9-27 05:38 编辑
一页多图不是一个新鲜的话题了,论坛里的帖子已经讲得很详细,也在此向前辈们致敬~
但我可能更喜欢适合自己的脚本,于是根据opengrads里的脚本subplot.gs修改了下。
附件里两个文件:subplot_x根据行来画,subplot_y按列来画。数据采用的是ncep reanalysis II 2010年的。色卡是用调色板调的
色标采用仿matlab格式:
http://bbs.06climate.com/forum.php?mod=viewthread&tid=9294 - *
- * Subplot(m,n,frame) - Like Matlab function subplot().
- * Usage: subplot_x m n frame
- * m : the number of rows
- * n : the number of columns
- * frame : the figure to draw
- * Examples:
- * 'subplot_x 2 2 1'
- * |------| |------|
- * |plot1| |plot2|
- * |------| |------|
- * |plot3| |plot4|
- * |------| |------|
- * 'subplot_x 3 1 1'
- * Notes:
- * plot 1st row first, then 2nd row, ...
- * Modified by Nanshui. Sep 27, 2017.
- function subplot(args)
- m = subwrd(args,1)
- n = subwrd(args,2)
- frame = subwrd(args,3)
- * find coordinates for this frame
- * -------------------------------
- ii = 0
- k = 0
- while ( ii < m )
- ii = ii + 1
- jj = 0
- while ( jj < n )
- jj = jj + 1
- k = k + 1
- if ( k = frame )
- i = ii
- j = jj
- break
- endif
- endwhile
- endwhile
- * Determine page size
- * -------------------
- 'q gxinfo'
- line = sublin(result,2)
- xsize = subwrd(line,4)
- ysize = subwrd(line,6)
-
- say xsize ' ' ysize
- * Determine xy in page coordinates
- * --------------------------------
- dx = (xsize-2) / n
- dy = (ysize-1.5) / m
- xoff = 0.125 * dx
- yoff = 0.125 * dy
- dy = dy - yoff/4
- xa = (j-1) * dx + xoff + 0.5
- xb = xa + dx - xoff
- ya = (m-i) * dy + yoff + 1
- yb = ya + dy - yoff
- *我改动了dx dy xa ya 留出了画色标的地方
- * Note :
- * dx dy xa xb ya yb could be modified according to your own prefrence.
- say 'set parea ' xa ' ' xb ' ' ya ' ' yb
- 'set parea ' xa ' ' xb ' ' ya ' ' yb
- *加入了下面几行,设置xlab ylab在整个图最外侧标
- if (i < m)
- 'set xlab off'
- else
- 'set xlab on'
- endif
-
- if( j = 1 )
- 'set ylab on'
- else
- 'set ylab off'
- endif
-
- return
复制代码
- 'reinit'
- 'open D:\Summer\F\NCEP-DOE-R2\vwnd\vwnd.year.ctl'
- 'enable print D:\Summer\F\NCEP-DOE-R2\subplot_test2.gmf'
- 'set grid off'
- 'set lon 0 360'
- 'set lat 0 90'
- 'set z 10'
- 'set map 1'
- 'set mproj scaled'
- 'set ylopts 1 5 0.15'
- 'set xlopts 1 5 0.15'
- 'set annot 1 5'
- fig = abcdefghijklmn
- i=1
- while(i<=8)
- 'set vpage 0 11 0 8.5'
- 'set grads off'
- 'subplot_y 4 2 'i''
- 'set t 'i''
- 'set ylint 20'
- 'set xlint 60'
- 'set gxout shaded'
- 'color_16_BlDarkRe'
- 'set rbcols 17 18 19 20 21 22 23 24 0 255 25 26 27 28 29 30 31 32'
- 'set clevs -40 -35 -30 -25 -20 -15 -10 -5 0 5 10 15 20 25 30 35 40'
- 'd vwnd'
- * 'set gxout contour'
- * 'set clevs -40 -35 -30 -25 -20 -15 -10 -5 5 10 15 20 25 30 35 40'
- * 'd vwnd'
- * 'draw_figstr2 TL 1.0 Fig.'i''
- figi=substr(fig,i,1)
- 'draw_figstr2 TL 1.0 ('figi')'
- i=i+1
- endwhile
- 'cbar_matlab 2 1 0 5.20 0.5'
- 'print'
- 'disable print'
- ;
复制代码
另外,在我的画图脚本里用到了@兰溪之水 的drawfigstr, 也根据自己的需要进行了修改。
http://bbs.06climate.com/forum.php?mod=viewthread&tid=15203
修改后可以在BL/BR/TR/TL标记长度不大于10的字符串,字符串外的框会随字符串长度调整。
但限于个人水平,修改之后使用比较受限,
兰溪原版使用如下: * 1. drawfigstr BottomLeft (a)
* 2. drawfigstr TL (b)
* 3. drawfigstr BR (c) 1.5
修改后只能按照下面的格式
* 1. 'draw_figstr2 BL 1.0 (a)'
* 2. 'draw_figstr2 TL 1.2 (b)'
* 3. 'draw_figstr2 BR 1.5 phase 1'
BL/BR/TR/TL 不能再写全名,只能简写,放大因子必须保留一位小数,所标字符串需要与撇号紧挨,不然图上标记时字符后会有空白。
所用函数一并打包放附件。
附件.zip
(1.31 MB, 下载次数: 91)
|
|