使用python封装绘图函数循环绘制ERA5风场资料的空间分布图

通常,在处理气象海洋资料时,经常会绘制风场的空间分布图进行简单分析,而常常需要连续绘制多天,并将多张子图绘制到同一个图片中,因此这就需要用到循环绘图。

  • 同时考虑到下载的ERA5风场资料的经度排列顺序是-180~180°,这里也简单进行了经度转换,将其转换为0 ~ 360的排列顺序。
  • 根据每个子图的数据,将选取的时间也在循环中加上
  • 考虑到绘制全球的处理时间较久,这里自由选取任意经纬度进行绘制
  • 由于每张子图的填色范围是固定的,所以统一绘制colorbar,至于图片最下端
  • 箭头为风场风量,填色为风速大小

下面附上代码:

# -*- coding: utf-8 -*-
"""
Created on %(date)s@author: %(jixianpu)sEmail : 211311040008@hhu.edu.cnintroduction : keep learning althongh walk slowly
"""
from matplotlib.ticker import AutoMinorLocator, MultipleLocator, FuncFormatterimport numpy as npimport pandas as pdimport cartopy.crs as ccrsimport cartopy.feature as cfeaturefrom cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatterimport matplotlib.pyplot as pltimport xarray as xrimport globfrom scipy import signalpath=r'G:/ERA5_200406/'str1='uwnd.200406.nc'str2='vwnd.200406.nc'# b, a = signal.butter(3, [(2/10)/(1/0.25),(2/3)/(1/0.25)], 'bandpass')######===================
def make_map(ax, title):# set_extent  set crsax.set_extent(box, crs=ccrs.PlateCarree())land = cfeature.NaturalEarthFeature('physical','land',scale,edgecolor='grey', facecolor='grey',zorder=2)ax.add_feature(land)  # set land colorax.coastlines(scale)  # set coastline resolution# set coordinate axisax.set_xticks(np.arange(box[0],box[1]+xstep, xstep),crs=ccrs.PlateCarree())ax.set_yticks(np.arange(box[2], box[3]+ystep, ystep),crs=ccrs.PlateCarree())ax.xaxis.set_major_formatter(LongitudeFormatter(zero_direction_label =False))#经度0不加标识ax.yaxis.set_major_formatter(LatitudeFormatter())# plt.tick_params(labelsize=25)ax.set_title(title, fontsize=20, loc='left',pad=12)ax.yaxis.set_minor_locator(AutoMinorLocator(5))ax.xaxis.set_minor_locator(AutoMinorLocator(10))ax.tick_params(which='minor', direction='out', length=4,width=0.59,right=True, top=True)ax.tick_params(which='major', direction='out', length=8,width=0.99, pad=3, labelsize=10,bottom=True, left=True, right=True, top=True)return ax# # prepare
box = [100, 180, -30, 0]
scale = '50m'
xstep, ystep = 20, 10
# cmap=plt.get_cmap('RdYlBu_r')#'RdYlBu_r'
# =======================data============================================
day=(np.arange(19,31))
da = xr.open_dataset(path+str1).sortby("latitude", ascending= True)
da2=xr.open_dataset(path+str2).sortby("latitude", ascending= True)#####################reverse################################################
lon_name = 'longitude'  # whatever name is in the data
da['longitude_adjusted'] = xr.where(da[lon_name] < 0, da[lon_name]%360,\da[lon_name])
da = (da.swap_dims({lon_name: 'longitude_adjusted'}).sel(**{'longitude_adjusted': sorted(da.longitude_adjusted)}).drop(lon_name))
da = da.rename({'longitude_adjusted': lon_name})
#####################reverse################################################
lon_name = 'longitude'  # whatever name is in the data
da2['longitude_adjusted'] = xr.where(da2[lon_name] < 0, da2[lon_name]%360,\da2[lon_name])
da2 = (da2.swap_dims({lon_name: 'longitude_adjusted'}).sel(**{'longitude_adjusted': sorted(da2.longitude_adjusted)}).drop(lon_name))
da2 = da2.rename({'longitude_adjusted': lon_name})#####################reverse################################################
fig=plt.figure(figsize=(14,14))
levels=np.arange(0,21,1)# wspace 调整水平的
plt.subplots_adjust(hspace=0.1)
plt.tight_layout()
count=0for i  in day:count+=1print(count)tim_s='2004-06-'+str(i)+'-00'
# longitude=slice(0,181)u=da.u.sel(level=slice(850,850),latitude=slice(-30,0),longitude=slice(100,180),time=slice(tim_s,tim_s))[0][0]v=da2.v.sel(level=slice(850,850),latitude=slice(-30,0),longitude=slice(100,180),time=slice(tim_s,tim_s))[0][0]w=np.sqrt(u*u+v*v)lon=u.longitude.datalat=u.latitude.datax,y=np.meshgrid(lon,lat)t=u.timestep=10# =======================plot============================================ax=fig.add_subplot(4,3,count,projection=ccrs.PlateCarree(central_longitude=180))make_map(ax,pd.to_datetime(t.data).strftime('%Y_%m_%d_%H:00'))ax.quiver(x[::step,::step],y[::step,::step],u.data[::step,::step],v.data[::step,::step],pivot='mid',\width=0.003,scale=200,headlength=4,headwidth=4,transform=ccrs.PlateCarree(),color='k',angles='xy',zorder=2)# ax.set_aspect('auto')plot=ax.contourf(x,y,w,transform=ccrs.PlateCarree(),extend='both',levels=levels,zorder=1)# cb=fig.colorbar(plot,ax=ax,shrink=0.8,pad=0.05,aspect=15)
# cb.ax.tick_params(labelsize=20)
# cb.ax.set_title('$°C$',fontsize=20,loc='right')
# if count==6:
#     break
ax3=fig.add_axes([0.25,0.1,0.5,0.015])  # 0.25控制距离左边的距离,0.01控制距离下面的距离,最后两位控制color的长度和厚度
cb=fig.colorbar(plot,cax=ax3,shrink=0.9,pad=0.04,ticks=[0,5,10,15,20],aspect=15,orientation='horizontal')
cb.ax.tick_params(labelsize=10)
cb.ax.set_title('$m/s$',fontsize=15)
plt.show()# fig.savefig('wind_850hpa-2004-06-19_30.png',format='png',dpi=100)

绘制结果如下图所示:

python--循环绘制ERA5风场的空间分布图相关推荐

  1. python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将利用Python绘制美丽的圆圈画, ...

  2. python循环绘制六角星_python画五角星和六角星程序

    1.五角星 import turtle turtle.forward(100) turtle.right(144) turtle.forward(100) turtle.right(144) turt ...

  3. python去除sst季节性空间分布图中,0°经线处出现的白线

    近日,在处理sst月均数据时,绘制出季节性的空间分布图时,发现:绘出的图像在0°出现一条白线,经过查询将问题已经解决. 图像问题如下: 其中,需要使用到cartopy.util模块下的add_cycl ...

  4. python--读取TRMM-3B43月平均降水绘制气候态空间分布图(陆地区域做掩膜)

    python–读取TRMM-3B43月平均降水绘制气候态空间分布图(陆地区域做掩膜) 成果展示 TRMM降水数据介绍 热带降雨测量任务(The Tropical Rainfall Measuring ...

  5. 利用python画空间分布图

    最近在用matlab跑数据,时间比较充足,所以想学一下python来画空间分布图,之前没有接触过python,感觉画图会比matlab更好看更流畅一些.画下来确实有耳目一新的感觉. 还是利用第一篇笔记 ...

  6. Python绘制气象风场

    title: Python绘制气象风场 date: 2021-08-05 21:01:52 tag: 气象风场数据来源为欧洲中心再分析数据ERA5 hourly data on pressure le ...

  7. python 全球降水四季空间分布图 居中经线问题

    # -*- coding: utf-8 -*- """ @Features: 空间分布图 季节平均 @Date:2022/4/30 """ ...

  8. python 绘制两组数据的分布图

    可以使用 Python 中的 Matplotlib 库来绘制两组数据的分布图.下面是一个简单的示例代码: import matplotlib.pyplot as plt# 假设有两组数据,分别是 x ...

  9. python——基本图形绘制(实例2:Python蟒蛇绘制)(模块1:turtle库的使用)

    前言 本篇主要介绍Python基本图形绘制,以Python蟒蛇绘制为例,介绍turtle库的使用. 并在最后对蟒蛇绘制的代码进行分析. 读完本篇,你将了解: 1.方法论 Python语言及海龟绘图体系 ...

  10. Python matplotlib 绘制量场图

    复习回顾 matplotlib 是基于Python语言的开源项目,pyplot提供一系列绘制2D图形的方法.随着版本的迭代,matplotlib 模块也支持绘制3D图形mplot3d工具包,制作动态图 ...

最新文章

  1. 利用 Python 打造一个语音合成系统
  2. python 打包egg_将Python程序打包到egg或WHL安装包或exe包中,把,python,成,或者,whl
  3. 小程序接收json_微信推出QQ小程序,但只能接收消息无法回复!网友:鸡肋
  4. L 苍天阻我寻你,此情坚贞如一(西南科技大学2021届新生赛)(线段树)
  5. 开源GIS解决方案,暨GeoServer+OpenLayer结合开发总结
  6. 活体检测python_活体检测很复杂?仅使用opencv就能实现!(附源码)!
  7. python两个元组相加_《第5章 Python 列表与元组》5.1.3 序列相加(Adding)!
  8. C语言:fopen与open的总结
  9. delphi 2010 mysql_DELPHI 10.2 TOKYO搭建LINUX MYSQL开发环境
  10. MAVEN插件打包SNAPSHOT包MANIFEST.MF中Class-Path带时间戳的问题
  11. SQL中返回刚插入记录的ID
  12. 基于SpringBoot的酒店管理系统
  13. PaddlePaddle证件照换底换大小工具
  14. 黄山市区到黄山风景区有多远,如何到黄山景区
  15. 【源起Netty 正传】升级版卡车——ByteBuf
  16. Nginx的安装使用----反向代理服务器
  17. WRF嵌套网格的设计
  18. 请问在 1 到 2020 中,有多少个数既是 4 的整数倍,又是 6 的整数倍。
  19. 无人驾驶引发的变革比想象的更快,留给车企和老司机的时间已不多
  20. 2020计算机数电实验第四次(2)

热门文章

  1. 双屏怎么快速切换鼠标_图文为您win7系统设置一键快速切换双屏显示的详细步骤...
  2. UINO优锘:干货分享 | 虚拟现实建模基础
  3. java ftp 卡死_ftpclient卡死问题
  4. 2020/2/24Axure 中继器使用心得
  5. 圣诞节贺卡计算机基础知识,制作圣诞节贺卡 如何制作圣诞节贺卡?圣诞节电子贺卡制作方法|电脑制作圣诞节贺卡...
  6. 笔记本电脑触摸板手势教程——快捷操作
  7. 快速给PDF批量添加目录
  8. 音频处理——G711标准详解
  9. 惊!Adam效果不好居然是因为……,Decouple Weight Decay Regulaization阅读笔记
  10. linux mkv转mp4,Linux DVD 转 MP4 – HandBrake – Copy a DVD to MP4 or MKV file