График видимости не отображается правильно при использовании np.where и np.copy

#python #numpy

#питон #тупица

Вопрос:

На данный момент я просто пытаюсь построить области, где видимость составляет менее 1 мили, и присвоить ей значение видимости 2, а затем, когда видимость составляет менее 10 миль, присвоить ей значение видимости 5. Эта идея идеально подходит для моего порыва ветра (gst), но когда я строю свои визиты, они строятся неправильно, и я знаю, что мой массив (nvis) правильный, потому что, когда я строю его, я получаю правильные цифры, но затем, когда я пытаюсь построить свой визит, он показывает изображение, показанное ниже. Я могу сказать, что что-то не так с моим np.shape или np.where потому что, когда я изменяю значения, такие как (nvis lt; 10 или nvis Я попытался переключиться по порядку мои nvis lt; 10 и nvis

Кто-нибудь знает, что я делаю неправильно, потому что это должно работать идеально, так как я следую почти тому же процессу, что и мой gst.

 ############# Imports from datetime import datetime, timedelta import requests import metpy.calc as mpcalc from metpy.units import units import urllib.request import xarray as xr import matplotlib import matplotlib.pyplot as plt from shapely import geometry import numpy as np ###########Time Stamps run_dt = datetime.utcnow()-timedelta(hours=2) # previous hour fhr = '00' fhr1 = '01' run = run_dt.strftime('%H') ymd = run_dt.strftime('%Y%m%d') ##########Wind Data Import # Data download url = 'https://nomads.ncep.noaa.gov/cgi-bin/filter_rap.pl?file=rap.t{run}z.awp130 pgrbf{fhr}.grib2amp;lev_0-6000_m_above_ground=onamp;lev_surface=onamp;var_GUST=onamp;var_VIS=onamp;var_VUCSH=onamp;var_VVCSH=onamp;leftlon=0amp;rightlon=360amp;toplat=90amp;bottomlat=-90amp;dir=/rap.{ymd}' URL = url.format(run=run, fhr=fhr, ymd=ymd) r = requests.get(URL) with open('/home/jupyter-kfa5169/FDI/wind.grib00', 'wb') as fh:  fh.write(r.content)  ds = xr.open_dataset('/home/jupyter-kfa5169/FDI/wind.grib00', engine='cfgrib') lon, lat = ds.longitude.values-360., ds.latitude.values gust = mpcalc.smooth_gaussian((ds.variables['gust'].values*units('m/s')).to('mph').magnitude, 4) visab = mpcalc.smooth_gaussian((ds.variables['vis'].values*units('m')).to('mile').magnitude, 4) #vshear = ds.variables['vvcsh'] #ushear = ds.variables['vucsh'] ################## Makes The Levels for Visability nvis = np.copy(visab) vis = np.ones(nvis.shape) vis = np.where(nvis lt; 5, 5, vis) vis = np.where(nvis lt; 10, 2, vis) ################## Makes The levels Gusts ngust = np.copy(gust) gst = np.ones(ngust.shape) gst = np.where(ngust gt; 40, 3, gst) gst = np.where(ngust gt; 50, 4, gst) gst = np.where(ngust gt; 60, 7, gst)  ################################# url = 'https://nomads.ncep.noaa.gov/cgi-bin/filter_rap.pl?file=rap.t{run}z.awp130pgrbf{fhr1}.grib2amp;lev_surface=onamp;var_ASNOW=onamp;var_FROZR=onamp;var_FRZR=onamp;leftlon=0amp;rightlon=360amp;toplat=90amp;bottomlat=-90amp;dir=/rap.{ymd}' URL = url.format(run=run, fhr1=fhr1, ymd=ymd) r = requests.get(URL) with open('/home/jupyter-kfa5169/FDI/wind.grib01', 'wb') as fh:  fh.write(r.content)  ds1 = xr.open_dataset('/home/jupyter-kfa5169/FDI/wind.grib01', engine='cfgrib') vis = mpcalc.smooth_gaussian((ds1.variables['asnow'].values*units('m')).to('inch').magnitude, 4) frz = ds1.variables['frzr'] ############################# PLOT #################### fig = plt.figure(figsize=(12,10)) ax = fig.add_subplot(111)  cs = ax.contourf(lon, lat, vis, levels=[0,1,2,3,4,5,6,7,10,15]) ## EDIT CONTOUR LEVELS HERE plt.colorbar plt.show()  

Изображение моего вывода:

Фотография

Image of output when I replace the vis with nvis for contourf and keep the same contour levels:

Фотография

Ответ №1:

Глядя на ваш код, основная проблема заключается в том, что имя vis привязывается к новым данным.

 vis = mpcalc.smooth_gaussian((ds1.variables['asnow'].values*units('m')).to('inch').magnitude, 4)  

Переход на другое имя, скажем,

 asnow = ...  

кажется, я понимаю: этот результат Кроме того, я думаю, вам захочется исправить вот так.

 vis = np.where(nvis lt; 10, 5, vis) vis = np.where(nvis lt; 5, 2, vis)  

Затем мы получаем: введите описание изображения здесь Я рекомендую вам использовать отладчик Python для мониторинга обработки данных и обнаружения подобных ошибок.