爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9846|回复: 12

MeteoInfoLab脚本示例:一页多图

[复制链接]

新浪微博达人勋

发表于 2015-12-4 21:45:44 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 MeteoInfo 于 2019-7-29 16:37 编辑

在MeteoInfoLab中实现一页多图可以用subplot(http://www.meteothink.org/docs ... s/plot/subplot.html)函数,但是如果一个subplot中有两个或者以上的坐标系(axes或axesm)时就不适合用subplot了,可以用axes(或者axesm)函数的position参数来控制子图的位置。这里演示制作一个4个不同物种(BC, PM2.5, SO2, NOx)的排放源清单图,图中有(a), (b), (c), (d)四个子图,每个子图还要有南海脚图,总共有8个坐标系(axesm)。

脚本程序:
  1. spnames = ['BC','PM2.5','SO2','NOx']
  2. nns = ['(a)','(b)','(c)','(d)']
  3. basedir = 'D:/KeyData/PMMUL/analysis'
  4. mapdir = 'D:/Temp/Map'
  5. sectors = ['TRANSPORT','AIR','ENERGY','INDUSTRY','RESIDENTIAL','SHIPS']

  6. #Figure
  7. figure(figsize=[822, 421], newfig=False)
  8. lworld = shaperead(os.path.join(mapdir, 'country1.shp'))
  9. lchina = shaperead(os.path.join(mapdir, 'bou2_4p.shp'))
  10. lsts = shaperead(os.path.join(basedir, 'shape/stations-1.shp'))
  11. sc_layer = shaperead(os.path.join(mapdir, 'bou1_4l.shp'))

  12. #Loop
  13. pn = 1
  14. col = 0
  15. row = 0
  16. for spname,nn in zip(spnames, nns):
  17.     varname = 'emi_' + spname.lower()
  18.     print varname
  19.     datadir = 'D:/KeyData/Emission/EDGAR_HTAP/2010/' + spname
  20.     i = 0
  21.     for sector in sectors:
  22.         f = addfile(os.path.join(datadir, 'edgar_HTAP_' + spname + '_emi_' + sector + '_2010.0.1x0.1.nc'))
  23.         bc = f[varname][[15,55],[72,137]]
  24.         if i == 0:
  25.             tbc = bc
  26.         else:
  27.             tbc = tbc + bc
  28.         i += 1
  29.     # Plot
  30.     if col == 2:
  31.         row += 1
  32.         col = 0
  33.     print row
  34.     print col
  35.     axesm(position=[0.5*col+0.01,0.5*(1-row)+0.05,0.4,0.44], tickfontname='Tahoma', tickfontsize=10)
  36.     geoshow(lworld)
  37.     geoshow(lchina)
  38.     geoshow(lsts, facecolor='b', size=2, labelfield='Stations', fontname='Tahoma', fontsize=10, yoffset=12)
  39.     levs = arange(5.0E-12, 2.0E-10, 5.0E-12)
  40.     if spname == 'BC':
  41.         levs = arange(1.0E-12, 4.0E-11, 1.0E-12)
  42.     cols = makecolors(len(levs) + 1, cmap='MPL_OrRd', reverse=False)
  43.     cols[0] = 'w'
  44.     layer = imshowm(tbc, levs, colors=cols)
  45.     colorbar(layer, fontname='Tahoma', fontsize=10)
  46.     xlim(72,137)
  47.     ylim(15,55)
  48.     text(75, 51, nn, fontname='Arial', fontsize=12, bold=True)
  49.     yticks(arange(20, 60, 10))
  50.     #Add south China Sea   
  51.     axesm(position=[0.5*col+0.345-0.016*col,0.5*(1-row)+0.06,0.06,0.12], axison=False)
  52.     geoshow(sc_layer)
  53.     xlim(106, 123)
  54.     ylim(2, 23)
  55.     pn += 1
  56.     col += 1
  57. #savefig(os.path.join(basedir, 'Figure/emis_2010.pdf'))


emis_2010.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-6 21:47:09 | 显示全部楼层
好图学习了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-7 07:05:37 | 显示全部楼层
期待已久的一页多图啊....
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-12-14 09:41:32 | 显示全部楼层
厉害,好看{:eb502:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2016-1-8 10:27:04 | 显示全部楼层

厉害
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2016-6-26 20:23:57 | 显示全部楼层
好图 学习了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-1-4 21:19:37 | 显示全部楼层
好图 学习了!,谢谢楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2018-6-18 19:20:30 | 显示全部楼层
请问楼主怎么让南海填色和大陆一致
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-3-11 21:11:44 | 显示全部楼层
本帖最后由 CHL1998 于 2020-3-11 21:14 编辑

不好意思老师,打扰您一下,我在使用subplot函数进行一页多图的绘制时遇到了这种问题,能够整体分框,但是最后的数据图还是在图片中间。
麻烦您指导一下,我该怎么修改
另外,“axesm(newfig=False)”这个语句我也加上过,但是没有效果  

代码如下:
  1. #read files
  2. f1 = addfile('D:/MODIS/MOD08_M3/MOD08_M3.A2010152.061.2017313162026.hdf')
  3. v_aod1 = f1['Aerosol_Optical_Depth_Land_Ocean_Mean_Mean']
  4. v_aod1.setdimrev(0, True)

  5. f2 = addfile('D:/MODIS/MOD08_M3/MOD08_M3.A2011152.061.2017325012251.hdf')
  6. v_aod2 = f2['Aerosol_Optical_Depth_Land_Ocean_Mean_Mean']
  7. v_aod2.setdimrev(0, True)

  8. #get data
  9. aod1 = v_aod1['30:45' , '105:125']
  10. aod1[aod1 == -9.999000474927016] = nan

  11. aod2 = v_aod2['30:45' , '105:125']
  12. aod2[aod2 == -9.999000474927016] = nan

  13. #plot
  14. subplot(2,2,1)
  15. levels = arange(0, 1.0, 0.02)
  16. geoshow('cn_province', linecolor='gray')
  17. geoshow('country', linecolor='gray')
  18. layer = contourfm(aod1,levels,interpolate=True,cmap='NCV_jet')
  19. colorbar(layer)

  20. subplot(2,1,2)
  21. levels = arange(0, 1.0, 0.02)
  22. geoshow('cn_province', linecolor='gray')
  23. geoshow('country', linecolor='gray')
  24. layer = contourfm(aod1,levels,interpolate=True,cmap='NCV_jet')
  25. colorbar(layer)
复制代码
批注 2020-03-11 210803.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-3-11 21:51:34 | 显示全部楼层
CHL1998 发表于 2020-3-11 21:11
不好意思老师,打扰您一下,我在使用subplot函数进行一页多图的绘制时遇到了这种问题,能够整体分框,但是 ...

subplot 函数前两个数字不能变,subplot 函数中可以用 axestype 参数,不再需要 axesm 函数语句。

subplot(2, 2, 1, axestype='map')

subplot(2, 2, 2, axestype='map')
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表