Я пытаюсь использовать 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 в тегах.
Этот код дает мне ошибку:
ValueError: operands could not be broadcast together with shapes (17,60,69) (17,60)
Что я знаю, так это то, что у меня 69 точек по оси x и 60 по оси y. Мой файл данных имеет 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()