爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 11484|回复: 8

[求助] 新手求助画温度场高度场叠加图出现错误怎么解决

[复制链接]

新浪微博达人勋

发表于 2020-7-11 11:41:04 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wxylndd 于 2020-7-11 11:47 编辑
  1. import netCDF4
  2. from netCDF4 import Dataset
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. from mpl_toolkits.basemap import Basemap
  6. nc_obj=Dataset('D://Anaconda//pressure-Part2//pressure//air.2009.nc')
  7. data = Dataset('D://Anaconda//pressure-Part2//pressure//hgt.2009.nc')
  8. lon=nc_obj.variables['lon'][32:160]
  9. lat=nc_obj.variables['lat'][12:80]
  10. time =nc_obj.variables['time'][429:432]
  11. level=nc_obj.variables['level'][:]
  12. level = np.array(level)
  13. level_need = 5
  14. temperature = nc_obj.variables['air'][429,level_need,12:80,32:160]
  15. hgt = data.variables['hgt'][429,level_need,12:80,32:160]
  16. hgt=hgt/10
  17. plt.figure(figsize=(16,8))
  18. m=Basemap(projection='cyl',llcrnrlat=15,urcrnrlat=55,llcrnrlon=70,urcrnrlon=140,resolution='l')
  19. lons,lats=m.makegrid(53,29)
  20. lats=lats[::-1]
  21. x,y=m(lons,lats)
  22. m.drawparallels(np.arange(15.,56.,10.),labels=[1,0,0,0],fontsize=15)
  23. m.drawmeridians(np.arange(75.,141.,15.),labels=[0,0,0,1],fontsize=15)
  24. m.drawcoastlines(linewidth=1.0, linestyle='solid', color='k',antialiased=1, ax=None, zorder=None)
  25. c_hgt = m.contour(lons,lats,hgt,colors='b',linewidths=1)
  26. plt.clabel(c_hgt,fmt='%1.0f',inline=100,colors = 'k',fontsize=15)
  27. m.drawlsmask()
  28. plt.title('20090418 00h 500hpa',size=20)
  29. plt.savefig('air1.png')
  30. plt.show()
复制代码
这是我的代码,现在提示:Traceback (most recent call last):
  File "D:\air.py", line 25, in <module>
    c_hgt = m.contour(lons,lats,hgt,colors='b',linewidths=1)
  File "D:\Anaconda\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 543, in with_transform
    return plotfunc(self,x,y,data,*args,**kwargs)
  File "D:\Anaconda\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 3569, in contour
    mask = np.logical_or(ma.getmaskarray(data),xymask)
ValueError: operands could not be broadcast together with shapes (61,112) (29,53)
是前面的参数设定有问题吗?我刚学python不久,不太会设定参数。
资料范围是东经32~160,北纬12~80,格距2.5*2.5,研究的范围是2009年4月18-20日
文件好像有大小限制,暂时传不上来

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

新浪微博达人勋

发表于 2020-7-11 16:33:59 | 显示全部楼层
第19行,改成
  1. lons,lats=m.makegrid(lon,lat)
复制代码

第25行,改成
  1. c_hgt = m.contour(x,y,hgt,colors='b',linewidths=1)
复制代码
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-11 12:18:42 | 显示全部楼层
题外话,现在充值是出现问题了吗,好像点开就显示乱码
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-11 16:09:06 | 显示全部楼层
pan.baidu.com/s/1417E57iiEIYv12Rel7HUKQ[/url]
提取码:3h14
这是数据的文件
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-11 17:15:45 | 显示全部楼层
Masterpiece 发表于 2020-7-11 16:33
第19行,改成

第25行,改成

好像还是不太行
Traceback (most recent call last):
  File "D:\air.py", line 19, in <module>
    lons,lats=m.makegrid(lon,lat)
  File "D:\Anaconda\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 1214, in makegrid
    return self.projtran.makegrid(nx,ny,returnxy=returnxy)
  File "D:\Anaconda\lib\site-packages\mpl_toolkits\basemap\proj.py", line 338, in makegrid
    x = self.llcrnrx+dx*np.indices((ny,nx),np.float32)[1,:,:]
  File "D:\Anaconda\lib\site-packages\numpy\core\numeric.py", line 1713, in indices
    res = empty((N,)+dimensions, dtype=dtype)
TypeError: only integer scalar arrays can be converted to a scalar index
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-7-11 20:22:09 | 显示全部楼层
wxylndd 发表于 2020-7-11 17:15
好像还是不太行
Traceback (most recent call last):
  File "D:\air.py", line 19, in

那第19行改
  1. lons, lats = np.meshgrid(lon,lat)
复制代码

用numpy的函数
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-13 19:16:49 | 显示全部楼层
Masterpiece 发表于 2020-7-11 20:22
那第19行改

用numpy的函数

按您说的修改后有图了,但现在等温线和等高线看起不太对,我想请问一下,如果要画某一个时刻的温压场,括号里第一项是直接写具体时刻还是用冒号代替啊,最后两项参数是格点数还是经纬度呀
temperature = nc_obj.variables['air'][429,level_need,12:80,32:160]
hgt = data.variables['hgt'][429,level_need,12:80,32:160]

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

使用道具 举报

新浪微博达人勋

发表于 2020-7-13 20:15:51 | 显示全部楼层
wxylndd 发表于 2020-7-13 19:16
按您说的修改后有图了,但现在等温线和等高线看起不太对,我想请问一下,如果要画某一个时刻的温压场,括 ...

直接用netcdf读出来的是nump array,不能直接用经纬度进行索引。
如果你想像NCL那样直接用经纬度clip这个数组,只能是用xarray了,版块的置顶教程里边有。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-7-14 09:39:30 | 显示全部楼层
Masterpiece 发表于 2020-7-13 20:15
直接用netcdf读出来的是nump array,不能直接用经纬度进行索引。
如果你想像NCL那样直接用经纬度clip这 ...

好的谢谢,我去看看
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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