python利⽤netCDF4处理⽓象数据(nc⽂件)利⽤python处理⽓象数据(nc⽂件)。安装netCDF4库,安装详见
解决步骤:
1>.  利⽤netCDF4解析nc⽂件,分析数据结构
2>.  利⽤matplotlib的Basemap、pyplot绘制(Basemap负责地图绘制)
⼀、
第⼀步: 解析nc 及 分析数据结构
#!/usr/bin/python
# coding=utf-8
from netCDF4 import Dataset
import numpy as np
import sys
def parse_nc():
file_path = "{path}\\data\\{filename}".format(
path=sys.path[0],
filename=''
)
print log_string, '开始解析⽂件', file_path
nc = Dataset(file_path)
for var in nc.variables.keys():pmp报考条件
path = sys.path[0]+'\\data\\'+var
data = nc.variables[var][:]
np.save(path, data)
print var , data.shape
print log_string, path + '.npy', '数据写⼊'
if var == 'u' or var == 'v' or var == 'z' or var == 't':
np.save(path+'_scale_factor', nc.variables[var].getncattr('scale_factor'))
print log_string, path + '_scale_factor.npy', '数据写⼊'
np.save(path+'_add_offset', nc.variables[var].getncattr('add_offset'))
print log_string, path + '_add_offset.npy', '数据写⼊'
nc.close()
print log_string, '数据全部写⼊完毕 !!!'
log_string = 'Log parse_nc.py :'
parse_nc()
007无暇赴死在线观看完整版免费
运⾏代码, log分析:
Log parse_nc.py : 开始解析⽂件 D:\work\workspace\python\data\
longitude (480L,)
Log parse_nc.py : D:\work\workspace\python\data\longitude.npy 数据写⼊
latitude (241L,)
Log parse_nc.py : D:\work\workspace\python\data\latitude.npy 数据写⼊
level (3L,)
Log parse_nc.py : D:\work\workspace\python\data\level.npy 数据写⼊
time (120L,)
Log parse_nc.py : D:\work\workspace\python\data\time.npy 数据写⼊
z (120L, 3L, 241L, 480L)
Log parse_nc.py : D:\work\workspace\python\data\z.npy 数据写⼊
Log parse_nc.py : D:\work\workspace\python\data\z_scale_factor.npy 数据写⼊
Log parse_nc.py : D:\work\workspace\python\data\z_add_offset.npy 数据写⼊
t (120L, 3L, 241L, 480L)
Log parse_nc.py : D:\work\workspace\python\data\t.npy 数据写⼊
Log parse_nc.py : D:\work\workspace\python\data\t_scale_factor.npy 数据写⼊
Log parse_nc.py : D:\work\workspace\python\data\t_add_offset.npy 数据写⼊
u (120L, 3L, 241L, 480L)
Log parse_nc.py : D:\work\workspace\python\data\u.npy 数据写⼊
Log parse_nc.py : D:\work\workspace\python\data\u_scale_factor.npy 数据写⼊
Log parse_nc.py : D:\work\workspace\python\data\u_add_offset.npy 数据写⼊
v (120L, 3L, 241L, 480L)
Log parse_nc.py : D:\work\workspace\python\data\v.npy 数据写⼊
Log parse_nc.py : D:\work\workspace\python\data\v_scale_factor.npy 数据写⼊
Log parse_nc.py : D:\work\workspace\python\data\v_add_offset.npy 数据写⼊
Log parse_nc.py : 数据全部写⼊完毕
如颜⾊标注,longitude、latitude,time,level,均为⼀维数组,z、t、u、v均为4维数组,每个维度的数据长度恰好对
应level、time、latitude、longitude⼀维数组的长度。故数据存在,z = f (level、time、latitude、longitude),t ,u, v同理。即:使⽤level、time、latitude、longitude做⾃变量绘制因变量z、t、u、v即可
⼆、
第⼆步。绘制
#!/usr/bin/python
# coding:utf-8
import sys
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemapdocument函数
# 数据⽂件路径
def data_path(filename):
file_path = "{path}/data/{filename}".format(
帝国模板仿站path=sys.path[0],
filename=filename
)
return file_path
# 获取数据
def read_data(path):
data = np.load(path)
print log_string, path, '数据读取'
return data
# 绘制
def graph(lon, lat, target, title):
print log_string, '开始绘制, 参数数据:', 'longitude:', lon.shape, ' latitude:', lat.shape, title, ":", target.shape
b_map = Basemap(resolution='l', area_thresh=10000, projection='cyl', llcrnrlon=0, urcrnrlon=360, llcrnrlat=-90, urcrnrlat=90)  # 实例basemap对象
print type(target)
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
lon, lat = np.meshgrid(lon, lat)  # ⽣成⽹格数据
x, y = b_map(lon, lat)
#for i in range(target.shape[0]):
#for j in range(target.shape[1]):
cs = urf(x, y, target[0, 0, :, :])
lorbar(cs)
b_map.drawcoastlines(linewidth=0.2)
plt.title(title, size=20)
#pic_path = sys.path[0] + '/data/' + title + '_pic/'+str(i)+'_'+str(j)+'.png'
#plt.savefig(pic_path)
#print log_string, sys.path[0] + '/data/' + title + '_pic/'+str(i)+'_'+str(j)+'.png  saved'
plt.show()
plt.close()
if __name__ == '__main__':
log_string = 'Log draw_data.py : '
title = 'u'
longitude = read_data(data_path('longitude.npy'))
气象python零基础入门教程latitude = read_data(data_path('latitude.npy'))wsdl接口怎么处理特殊符号
tar = read_data(data_path(title+'.npy'))
scale_factor = read_data(data_path(title+'_scale_factor.npy'))
add_offset = read_data(data_path(title+'_add_offset.npy'))
new_tar = tar*scale_factor+add_offset  # 偏移计算
graph(longitude, latitude, new_tar, title)  # 画图
这⾥绘制u,对应平⾯是 target[0, 0, :, :],即 ,level [0] ,time [0],所有经纬度的图形,其他平⾯,只需要修改函数        contourf(x, y, target[0, 0, :, :])参数,tiltle值即可。
结果如下:
代码地址:
数据保存到 nc_file_deal/data/ 下即可

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