python中的后处理wrf输出

时间:2019-05-14 19:37:19

标签: python numpy

我正在尝试使用python对WRF输出进行后处理。对于我的基本python而言,我所见过的各种脚本太复杂了。我设法从这里到那里放一些代码。但是,在我的最终情节中,我无法正确捕获数据。 我将不胜感激。 我的代码如下 给出错误结果的两行是:

cs=m.pcolormesh(lons, lats, baseArray, shading='flat', latlon=True)

#cs=m.contourf(lons, lats, baseArray, shading='flat', latlon=True)

很明显,我对轮廓z分量的定义

baseArray = np.fromfunction(lambda y,x: (1000.0 / (width + height)) * (y+x), (height, width), dtype = float)

不正确。

我将很高兴为您定义变量提供帮助,使绘制的内容反映输入文件中的内容。

from netCDF4 import Dataset
import numpy as np
from matplotlib.mlab import griddata

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from datetime import datetime, timedelta

fh = Dataset("wrfout_d01_2019-03-28_00:00:00", mode="r")
lons = fh.variables["XLONG"][:]
lats = fh.variables["XLAT"][:]
temp = fh.variables["T2"][:]
temp_units = fh.variables['T2'].units

fh.close()

# define map extent
lllon,lllat,urlon,urlat = 17.25,-21.90,38.44,-04.07

width = 300
height = 200

dlon = (urlon-lllon) / width
dLat = (urlat-lllat) / height
baseArray = np.fromfunction(lambda y,x: (1000.0 / (width + height)) * (y+x), (height, width), dtype = float)

lons = np.arange(lllon, urlon, dlon)
lats = np.arange(lllat, urlat, dLat)
lons, lats = np.meshgrid(lons, lats)

fig = plt.figure()

# Set up Basemap instance
m = Basemap(
projection = 'merc',
llcrnrlon = lllon, llcrnrlat = lllat, urcrnrlon = urlon, urcrnrlat = urlat,resolution='h')

# Plot Data
cs=m.pcolormesh(lons, lats, baseArray, shading='flat', latlon=True)
#cs=m.contourf(lons, lats, baseArray, shading='flat', latlon=True)

# Add Grid Lines
m.drawparallels(np.arange(-80., 81., 5.), labels=[1,0,0,0], fontsize=10)
m.drawmeridians(np.arange(-180., 181., 5.), labels=[0,0,0,1], fontsize=10)

# Add Coastlines, States, and Country Boundaries
m.drawcoastlines()
m.drawstates()
m.drawcountries()

# Add Colorbar
cb = plt.colorbar(cs ,shrink=1.0) #, extend='both')

# Add Title
plt.title("Temperature")

plt.savefig("Temp2s.png" , format="png", dpi=300, transparent=True)

plt.show()

以下是与应该工作的代码接近的代码。有了这段代码,我的经度(x)和纬度(y)的numpy数组出现了问题。我希望有人精通numpy可以帮助我。我在标签中添加了numpy。 这段代码给了我错误:

ValueError: operands could not be broadcast together with shapes (17,60,69) (17,60) 

我所知道的是,我在x方向上有69个点,在y方向上有60个点。我的数据文件有19个级别和9个时间步。我不知道17在哪里 来自。

from netCDF4 import Dataset
import numpy as np
from matplotlib.mlab import griddata

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap, cm
from datetime import datetime, timedelta

fh = Dataset("wrfout_d01_2019-03-28_00:00:00", mode="r")
lons = fh.variables["XLONG"][:]
lats = fh.variables["XLAT"][:]
data = fh.variables["T2"][:]
data_units = fh.variables['T2'].units

fh.close()

# define map extent
lllon,lllat,urlon,urlat =  17.25,-21.90,38.44,-04.07

# Set up Basemap instance
m = Basemap(
    projection = 'merc', \
    llcrnrlon = lllon, llcrnrlat = lllat, \
    urcrnrlon = urlon, urcrnrlat = urlat, resolution='h')

# Add Coastlines, States, and Country Boundaries
m.drawcoastlines()
m.drawstates()
m.drawcountries()

# Add Grid Lines
# draw parallels.
parallels = np.arange(0.,90,10.)
m.drawparallels(parallels,labels=[1,0,0,0],fontsize=10)

# draw meridians
meridians = np.arange(180.,360.,10.)
m.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10)

 x,y = m(lons, lats) # compute map proj coordinates.

# draw filled contours.
cs = m.contourf(x,y,data)

# Add Colorbar
cb = plt.colorbar(cs ,shrink=1.0) #, extend='both')

# Add Title
plt.title("Surface Temperature")

plt.savefig("Temp2.png" , format="png", dpi=300, transparent=True)
plt.show()

1 个答案:

答案 0 :(得分:0)

这里有一些Python WRF处理程序包,值得研究进行绘图和分析。它们都很容易使用: