爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11270|回复: 4

[经验总结] 又是一波骚操作。疑问已解决,代码分享给大家

[复制链接]

新浪微博达人勋

发表于 2019-3-28 20:56:34 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 王先生 于 2019-3-29 23:27 编辑

继续来问一波干货。先上代码
#—*— coding utf-8 -*-
'''
Created on Wed 27 10:22:00 2019
@auther WYL
'''
import numpy as np
import matplotlib.pyplot as plt
import netCDF4 as nc

obj = nc.Dataset('f:/merra2/W/MERRA2_400.inst3_3d_asm_Np.20120601.SUB.nc4')
lat = obj.variables['lat'][:]
lev = obj.variables['lev'][0:20]
lon = obj.variables['lon'][220:280]
time= obj.variables['time'][0]
W   = obj.variables['OMEGA'][0,0:20,100,220:280]
#print('W的单位',obj.variables['OMEGA'])
#print(lev[26])

obj2 = nc.Dataset("f:/merra2/QV/MERRA2_400.inst3_3d_asm_Np.20120610.SUB.nc4")
#print(obj)
time_bnds = obj2.variables['time_bnds'][:]
#print(time_bnds[:])
time1 = obj2.variables['time'][0]
lev1 = obj2.variables['lev'][0:20]
lat1 = obj2.variables['lat'][:]
lon1 = obj2.variables['lon'][220:280]
QV = obj2.variables['QV'][0,0:20,100,220:280]
QV = QV*1000
QV1=np.ma.array(QV1, mask=QV1>0)
#print(lat[100])
plt.figure(figsize=(12,6))
plt.semilogy()#取对数坐标
plt.gca().invert_yaxis()#Y轴坐标反转
lons,levs=np.meshgrid(lon,lev)
x,y = lons,levs    #W=np.arange(-0.3,0,0.05)
Welem = obj.variables['OMEGA'][0,0:20,100,220:280]
shade = plt.contour(x,y,Welem,5,colors='k')
shade1= plt.contourf(x,y,QV1,10,cmap='jet')
plt.colorbar(shade1)
plt.clabel(shade,inline=1,fontsize=10)
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('35°N垂直速度、水汽叠加图(垂直速度:Pa·s﹣,水汽:g·kg1')


plt.show()


感谢2楼提供的语句。@  。解决方案如下,选择文件中固定值域进行画图,
把大于0的数据都mask掉就好了
Welem = np.ma.array(Welem, mask=Welem>0)
或者,你可以可以指定标contour的层面
shade = plt.contour(x,y,Welem,levels=[0, -1, -2, -3, ...],colors='k')

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

新浪微博达人勋

 楼主| 发表于 2019-3-28 21:02:15 | 显示全部楼层
有没有大神能处理的了的,我在网上实在找不到怎么办才来发帖问的,不是伸手党,代码分享给大家。有人给解决了我就把merra2的再分析资料也传上来让大家练手
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-3-28 21:23:17 | 显示全部楼层
把大于0的数据都mask掉就好了
Welem = np.ma.array(Welem, mask=Welem>0)
或者,你可以可以指定标contour的层面
shade = plt.contour(x,y,Welem,levels=[0, -1, -2, -3, ...],colors='k')
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-3-29 07:52:45 | 显示全部楼层
eeeee 发表于 2019-3-28 21:23
把大于0的数据都mask掉就好了
Welem = np.ma.array(Welem, mask=Welem>0)
或者,你可以可以指定标contour ...

谢谢我等等试试

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-3-29 07:52:50 | 显示全部楼层
eeeee 发表于 2019-3-28 21:23
把大于0的数据都mask掉就好了
Welem = np.ma.array(Welem, mask=Welem>0)
或者,你可以可以指定标contour ...

谢谢我等等试试

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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