爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4614|回复: 9

批量画图并保存

[复制链接]

新浪微博达人勋

发表于 2016-12-28 11:05:05 | 显示全部楼层 |阅读模式

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

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

x
王老师,最近用模式跑了一个3个月的过程,起始时间是2008年6月1日00时,终止实践是2008年9月1日00时,时间间隔是3小时,现在想用U、V分量画每一时次的风矢量图并且以时间命名保存成eps格式,但是手动改时间太麻烦,想问下老师能不能批量处理,附上画单个时次风矢量图的脚本,请老师指导,万分感谢!
  1. f = addfile('E:/gongzuo/3.8.1/summer0801.ctl')
  2. t = datetime.datetime(2008,06,01,00)
  3. u = f['U'][[t],[500],::4,::4]
  4. v = f['V'][[t],[500],::4,::4]
  5. speed = sqrt(u*u+v*v)
  6. #Plot
  7. axesm()
  8. lchina = shaperead('F:/11/MeteoInfo/map/bou2_4p.shp')
  9. ltibet = shaperead('F:/11/MeteoInfo/map/DBATP/DBATP_Polygon.shp')
  10. geoshow(lchina, edgecolor='k')
  11. geoshow(ltibet, edgecolor='r',size=2)
  12. levs = [10,20,30,40,50]
  13. layer = quiverm(u,v,speed,levs,size=8,proj=f.proj)
  14. colorbar(layer,fontsize=17)
  15. #title(t.strftime('%Y-%m-%d %H:00'))
  16. #xlabel(u'2014年10月28日18时(UTC)500hPa风场',fontname='黑体',fontsize=17)
  17. xticks(fontsize=17)
  18. yticks(fontsize=17)
  19. xlim(75,115)
  20. ylim(25,45)
复制代码

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

新浪微博达人勋

发表于 2016-12-28 12:48:30 | 显示全部楼层
加上时间的循环就可以了,参考此贴:MeteoInfoLab脚本示例:gif动画图
http://bbs.06climate.com/forum.p ... 157&fromuid=106
(出处: 气象家园)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-29 21:09:04 | 显示全部楼层
MeteoInfo 发表于 2016-12-28 12:48
加上时间的循环就可以了,参考此贴:MeteoInfoLab脚本示例:gif动画图
http://bbs.06climate.com/forum.ph ...

王老师,学生愚钝,今天研究了一下那个gif的帖子,所以自己编了一个时间循环的,但是有一个问题就是不知道每次保存的语句该怎么写,考虑了使用savefig函数,但是文件名是变化的,.strftime('%y%m%d%H')也不知道该怎么加上去,附上脚本,请王老师指导,这个脚本运行以后提示
mismatched input 'u' expecting INDENT
  1. #obsdir = 'F:/test'
  2. #Get forecasting data files
  3. f = addfile('E:/gongzuo/3.8.1/summer0801.ctl')
  4. st = datetime.datetime(2008,06,01,00)
  5. #Plot
  6. axesm()
  7. lchina = shaperead('F:/11/MeteoInfo/map/bou2_4p.shp')
  8. ltibet = shaperead('F:/11/MeteoInfo/map/DBATP/DBATP_Polygon.shp')
  9. geoshow(lchina, edgecolor='k')
  10. geoshow(ltibet, edgecolor='r',size=2)
  11. #Loop
  12. tnum = f.timenum()
  13. t = 0
  14. for t in range(0, tnum-1):
  15. #tt = f.gettime(t)
  16. u = f['U'][t,[500],::4,::4]
  17. v = f['V'][t,[500],::4,::4]
  18. speed = sqrt(u*u+v*v)
  19. levs = [10,20,30,40,50]
  20. layer = quiverm(u,v,speed,levs,size=8,proj=f.proj)
  21. title('UV ' + sbjt.strftime('%Y-%m-%d %H:00') + bold=False)
  22. colorbar(layer,fontsize=17)
  23. sbjt = st + datetime.timedelta(hours=3*(t+1))
  24. savefig('F:/test/test.png', width=800, height=600)
  25. #obsfn = os.path.join(obsdir,sbjt.strftime('%y%m%d%H')+ '.png')
  26. t += 1
复制代码

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

新浪微博达人勋

发表于 2016-12-29 22:19:07 | 显示全部楼层
半颗麦芽糖 发表于 2016-12-29 21:09
王老师,学生愚钝,今天研究了一下那个gif的帖子,所以自己编了一个时间循环的,但是有一个问题就是不知 ...

MeteoInfoLab脚本是Python语法,你需要对Python语法有基本的了解。这个简单的系列教程还不错:http://www.cnblogs.com/vamei/
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-29 22:23:26 | 显示全部楼层
MeteoInfo 发表于 2016-12-29 22:19
MeteoInfoLab脚本是Python语法,你需要对Python语法有基本的了解。这个简单的系列教程还不错:http://www ...

多谢王老师,我学习一下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-30 11:44:39 | 显示全部楼层
MeteoInfo 发表于 2016-12-29 22:19
MeteoInfoLab脚本是Python语法,你需要对Python语法有基本的了解。这个简单的系列教程还不错:http://www ...

王老师,初步学习了一下Python,原来是我脚本格式的问题,已做修改成功出图,但是存在一个问题,图中没有出现我设定的高原边界,别的都是正常的,请问老师是什么原因呢?
ltibet = shaperead('F:/11/MeteoInfo/map/DBATP/DBATP_Polygon.shp')
geoshow(ltibet, edgecolor='r',size=2)

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

新浪微博达人勋

发表于 2016-12-30 11:57:42 | 显示全部楼层
半颗麦芽糖 发表于 2016-12-30 11:44
王老师,初步学习了一下Python,原来是我脚本格式的问题,已做修改成功出图,但是存在一个问题,图中没有 ...

你把全部代码贴出来看看
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-30 12:07:34 | 显示全部楼层
MeteoInfo 发表于 2016-12-30 11:57
你把全部代码贴出来看看

好的,王老师,脚本如下:
  1. obsdir = 'F:/test'
  2. #Get forecasting data files
  3. f = addfile('E:/gongzuo/3.8.1/summer0801.ctl')
  4. st = datetime.datetime(2008,06,01,00)
  5. #Plot
  6. axesm()
  7. lchina = shaperead('F:/11/MeteoInfo/map/bou2_4p.shp')
  8. ltibet = shaperead('F:/11/MeteoInfo/map/DBATP/DBATP_Polygon.shp')
  9. geoshow(lchina, edgecolor='k')
  10. geoshow(ltibet, edgecolor='r',size=2)
  11. #Loop
  12. tnum = f.timenum()
  13. t = 0
  14. for t in range(0, tnum-1):
  15. #tt = f.gettime(t)
  16.     cll()
  17.     u = f['U'][t,[500],::4,::4]
  18.     v = f['V'][t,[500],::4,::4]
  19.     speed = sqrt(u*u+v*v)
  20.     levs = [10,20,30,40,50]
  21.     layer = quiverm(u,v,speed,levs,size=8,proj=f.proj)
  22.     colorbar(layer,fontsize=17)
  23.     xlim(70,110)
  24.     ylim(25,45)
  25.     sbjt = st + datetime.timedelta(hours=3*(t+1))
  26.     title('UV ' + sbjt.strftime('%Y-%m-%d %H:00') ,bold=False)
  27.     savefig(os.path.join(obsdir, 'UV' + sbjt.strftime('%y%m%d%H') + '--loop-.png'))
  28.     t += 1
复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-12-30 12:32:34 | 显示全部楼层
半颗麦芽糖 发表于 2016-12-30 12:07
好的,王老师,脚本如下:

cll()命令会删除图中最后添加的那个图层,在第一次循环的时候用cll()会删除ltibet图层,之后每次循环会删除上次生成的layer图层。因此需要加一条判断语句,只有在t > 0时才运行cll()命令,也就是说在第一次循环时不运行cll()命令。

if t > 0:
    cll()
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-12-30 12:54:34 | 显示全部楼层
MeteoInfo 发表于 2016-12-30 12:32
cll()命令会删除图中最后添加的那个图层,在第一次循环的时候用cll()会删除ltibet图层,之后每次循环会删 ...

多谢王老师指导,已经成功出图
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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