python实现⽓象数据分析_⽓象数据可视化——利⽤Python绘
制温度平流
##数据来源:NCEP再分析数据
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
#import scipy.stats as ss
import netCDF4 as nc链接转换工具
import math
file1=r'C:\Users\59799\an.nc'
file2=r'C:\Users\59799\an.nc'
file3=r'C:\Users\59799\an.nc'
uwnd=nc.Dataset(file1);vwnd=nc.Dataset(file2)
air=nc.Dataset(file3)
###通⽤量读取
lat=np.array(uwnd.variables['lat'])
lon=np.array(uwnd.variables['lon'])
level=np.array(uwnd.variables['level'])
###u,v,airtemp获取
u=np.array(uwnd.variables['uwnd'])
v=np.array(vwnd.variables['vwnd'])
airtemp=np.array(air.variables['air'])
许昌鄢陵疫情
##⽔平温度平流计算公式为 -(udt/dx+vdt/dy)
##对于离散数据,⽆法做微分会偏微分运算,采取计算⽅法中
##提到的差分⽅法,这⾥利⽤前差
##对于level和time的选取,因为本code仅仅做⽰例
##我们选取level为850hPa,time为1948-01-01
##即level[2];time[0]
remove是什么##还有⼀个重要问题:dx为某⼀纬度,通过2.5经度的距离
##即不同纬度dx不等(考虑球坐标);但是对于dy从⾚道到极点是固定的
#--------------------------------------#
#⾸先计算dy
R=6371*1000#地球半径6371km
theta=math.radians(2.5)##⾓度转弧度,数据经纬度间隔为2.5°dy=R*theta
#计算dx
气象python零基础入门教程dx=[]
fifo实现分析###r为90N到0的⼩圆半径
for i in range(len(lat[0:73])):
print(lat[i])
arg=math.radians(lat[i])
r=s(arg)
#print(r)
dx.append(r*math.radians(2.5))
dx=np.array(dx)##dx为90N到0每⼀纬圈经过2.5°经度的距离差dx[0]=0;dx[72]=0
##先求dt/dx
###因为是圆形区域,所以前差并不会导致横向数据量减少
pty((73,144))
for i in range(len(lat)):
for j in range(len(lon)):
if (i==0) or (i==72):
dtdx[i,j]=0
else:
if j==143:
dtdx[i,0]=(airtemp[1,2,i,0]-airtemp[1,2,i,j])/dx[i]
else:
dtdx[i,j+1]=(airtemp[1,2,i,j+1]-airtemp[1,2,i,j])/dx[i]
###再求dt/dy
s((73,144))
for j in range(len(lon)):
for i in range(len(lat)):
if i==72:
dtdy[i,j]=0
else:
div floatdtdy[i+1,j]=(airtemp[1,2,i+1,j]-airtemp[1,2,i,j])/dy
###得出温度平流 -(udt/dx+vdt/dy)
>#唯独87.5往上⽆数据
>#唯独87.5往上⽆数据
>#唯独87.5往上⽆数据
s((73,144))
for i in range(len(lat)):
for j in range(len(lon)):
dTdt[i,j]=-(u[1,2,i,j]*dtdx[i,j]+v[1,2,i,j]*dtdy[i,j])
#绘图
[X,Y]=np.meshgrid(lon[:],lat[1:72])
LON_an()
LAT_an()
map=Basemap(lon_0=LON_0,lat_0=LAT_0,llcrnrlon=lon[0],llcrnrlat=lat[71],urcrnrlon=lon[143],urcrnrlat=lat[1]) map.drawcoastlines()
urf(X,Y,dTdt[1:72,:],cmap='coolwarm')
plt.title(' 1948 JAN. Temperature Advection (87.5N-87.5S) ')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论