爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7405|回复: 7

[源代码] Python读取NC数据画风场和急流区

[复制链接]

新浪微博达人勋

发表于 2022-6-30 21:36:24 | 显示全部楼层 |阅读模式

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

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

x
Python读取NC数据画风场和急流区Python读取NC数据画风场和急流区
作者今天不想说话,注意点都在代码注释里了,各位看官凑活看哈
Figure_1.png
  1. #知识点   1.多图共用一个色标
  2. #         2.四张一样的图做循环,不用一张一张画

  3. #共用色标的原理,其实就是多加一个子图,把色标放子图里,然后调整一下位置就好了


  4. #循环的原理就是建立四个子图,同样沟通步骤循环四遍
  5. #因为四张图是一摸一样的,只有数据不同,所以通过循环4次直接产生四张图




  6. #处理数据的包
  7. import xarray as xr
  8. import numpy as np
  9. #画图的包
  10. import matplotlib.pyplot as plt
  11. #地图的包
  12. import cartopy.crs as ccrs
  13. import my_class





  14. #打开nc文件
  15. #这些都是只需要执行一次的东西
  16. ds = xr.open_dataset('download_201309.nc')
  17. lat = ds.latitude
  18. lon = ds.longitude
  19. time = ds.time
  20. u = ds['u']
  21. v = ds['v']
  22. lat_range = lat[(lat>=22) & (lat<=44)]
  23. lon_range = lon[(lon>=102) & (lon<=135)]
  24. fig = plt.figure(figsize=(18,9))

  25. #设置4个子图,并且放到列表里面,方便循环的时候用
  26. plt.subplots_adjust(left=0.07, right=0.90, top=0.95, bottom=0.05,wspace=0.0009,hspace=0.1)
  27. ax_a = fig.add_subplot(2,2,1,projection = ccrs.PlateCarree())
  28. ax_b = fig.add_subplot(2,2,2,projection = ccrs.PlateCarree())
  29. ax_c = fig.add_subplot(2,2,3,projection = ccrs.PlateCarree())
  30. ax_d = fig.add_subplot(2,2,4,projection = ccrs.PlateCarree())

  31. ax_list = [ax_a,ax_b,ax_c,ax_d]
  32. abcd = ['(a)','(b)','(c)','(d)']#图右上角的abcd
  33. i = 0#循环变量




  34. #开始循环,以时间为循环的变量,i作为辅助
  35. for time_i in time:
  36.     #取数据
  37.     u_region = u.sel(longitude=lon_range, latitude=lat_range,time = time_i)
  38.     v_region = v.sel(longitude=lon_range, latitude=lat_range,time = time_i)
  39.     #算风速
  40.     wind_speed = np.sqrt(u_region * u_region + v_region * v_region)
  41.     #清洗风速,小于24的都置零
  42.     e = (wind_speed > 23)
  43.     wind_speed_region = np.where(e,wind_speed,0)


  44.     #i的作用来了,利用i得到相应的子图
  45.     ax_list[i].set_xticks(np.arange(102,136,3),crs=ccrs.PlateCarree())
  46.     ax_list[i].set_yticks(np.arange(22,45,2),crs=ccrs.PlateCarree())
  47.     xticks_str = ['102', '105', '108', '111', '114', '117', '120','123', '126', '129', '132', '135°E']
  48.     ax_list[i].set_xticklabels(xticks_str,fontsize = 11)
  49.     yticks_str = ['22   ','24    ','26    ','28    ','30    ','32    ','34    ','36    ','38    ','40    ','42    ','44°N']
  50.     ax_list[i].set_yticklabels(yticks_str,fontsize = 11)
  51.     my_class.readshapefile('bou2_4l.shp',linewidth=1,ax=ax_list[i])

  52.     #填色
  53.     #色标可以自己选择风格,也可以自定义,在之前的代码里面有
  54.     cf_rh = ax_list[i].contourf(lon_range,lat_range ,wind_speed_region,cmap='hot_r',extend='both')

  55.     #风杆
  56.     ax_list[i].barbs(lon_range[::4],lat_range[::4],u_region[::4,::4],v_region[::4,::4],barbcolor=['k'],linewidth=0.5,length=5,barb_increments=dict(half=2, full=4, flag=20))

  57.     #写abcd
  58.     ax_list[i].text(0.05, 0.95, abcd[i],transform=ax_list[i].transAxes, fontsize=11)

  59.     #一次循环结束 i+1
  60.     i += 1




  61. #色条额外添加一个子图,【左侧距离,下侧距离,宽度,高度】
  62. position=fig.add_axes([0.90,0.3,0.01,0.4])
  63. cb=fig.colorbar(cf_rh,cax=position,orientation='vertical')
  64. font = {'family' : 'serif',#字体
  65.         'color'  : 'k',#颜色
  66.         'weight' : 'normal',#自己百度吧
  67.         'size'   : 11,#字体大小
  68.         }
  69. cb.set_label('    m/s',rotation=360,fontdict=font)




  70. plt.show()
复制代码
原帖位于:https://blog.csdn.net/weixin_423 ... 1001.2014.3001.5502

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

新浪微博达人勋

发表于 2022-7-1 15:30:39 | 显示全部楼层
学习学习{:eb502:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-7-7 22:40:22 | 显示全部楼层
my_class在哪里呢,谢谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-7-24 00:10:39 | 显示全部楼层
{:eb502:}代码简洁,效率高,感谢楼主分享
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-3-8 17:34:30 | 显示全部楼层
my_class可以共享吗,谢谢!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-5-31 11:28:55 | 显示全部楼层
感谢分享!厉害厉害!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-6-9 16:24:44 | 显示全部楼层

感谢分享!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2024-1-15 10:18:38 | 显示全部楼层
多谢代码,学习了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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