Отображение уровня 2 данных NEXRAD Radar в Python - TypeError: объект 'MaskedArray' не вызывается - PullRequest
0 голосов
/ 15 января 2020

Hello StackOverflow Community,

Я новичок Python программист (Python 3.8.1), который ищет некоторую помощь в построении радиолокационных снимков NEXRAD уровня 2, которые я экспортировал из NOAA Weather и Climate Toolkit (файл NetCDF3 с сеткой, как мне кажется) поверх базовой карты, которую я создал с использованием базовой карты 1.2.1. Я выполняю свой код, используя Jupyter Notebooks через miniconda в моем терминальном окне (Ma c OS Mojave 10.14.6).

Вот первая часть моего кода, которая определяет базовую карту и успешно строит ее вместе с береговые линии и линии широты / долготы (обратите внимание, что координаты для объявления базовой карты связывают график с Южной Калифорнией).

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

def data_map():
    plt.clf()
    fig = plt.figure(figsize = (10,10))
#----------------------------------------------------------------------------------------------
    #Set lat/lon coordinates for basemap projection (default projection = cylindrical equadistant)
    lllon = -121
    lllat = 32
    urlon = -115.5
    urlat = 35.5

    #set lat/lon coordinates as well as plotting interval for drawing lat/lon as axis of plot
    latmin=32
    latmax=36
    lonmin=-121
    lonmax=-114
    latinterval=1
    loninterval=1
#----------------------------------------------------------------------------------------------
    #create basemap and add some content to create a good starting point for plotting data
    map = Basemap(llcrnrlon=lllon, llcrnrlat=lllat, urcrnrlon=urlon, urcrnrlat=urlat, resolution='f',epsg=3311)
    map.drawcoastlines(linewidth=2,zorder=1)
    map.drawparallels(np.arange(latmin, latmax, latinterval), labels=[1,0,0,0],color='w',textcolor='k',linewidth = 0, zorder=1, fontsize=14)
    map.drawmeridians(np.arange(lonmin, lonmax, loninterval), labels=[0,0,0,1],color='w',textcolor='k',linewidth = 0, zorder=1, fontsize=14)
    map.arcgisimage(service='ESRI_Imagery_World_2D', xpixels=1000)

Теперь вот второй раздел моего кода, который предназначен для чтения в сетевом NetCDF3 NEXRAD файл, который я экспортировал из набора инструментов NOAA Weather & Climate (примечание: файл имеет только один временной шаг). Код останавливается до того, как начнется какое-либо графическое представление.

import netCDF4 as nc4
#-----------------------------------------------------------------------------------
#NEXRAD lvl 2 plotting using NetCDF file
#Read in NetCDF file variables: lat, lon, time, reflect. 
nc_file = nc4.Dataset('/Users/mariandob/Desktop/my-notebook/KNKX_V03_20120325_232219.nc', format='NETCDF3_CLASSIC')
nc_lat  = nc_file.variables['lat'][:]
nc_lon  = nc_file.variables['lon'][:]
nc_time = nc_file.variables['time'][:]
nc_reflect = nc_file.variables['Reflectivity'][:] 

lon,lat = np.meshgrid(nc_lon,nc_lat) #Unsure if this is necessary. 
#I believe each variable is 1-dimensional
#so I think doing this makes the lat/lon variables into 2-dimensional arrays 
#which is necessary for plotting.

x,y = map(lon,lat) #ERROR OCCURS HERE: TypeError: 'MaskedArray' object is not callable

Я нашел отличный пост в блоге о графическом построении файлов NetCDF, используя python здесь . Автор поста использует строку, в которой происходит моя ошибка, чтобы сопоставить координаты широты / долготы файла NetCDF с координатами в проекции базовой карты. Однако, когда я пытаюсь сделать это, я получаю ошибку "TypeError: 'MaskedArray' object is not callable". Я попытался преобразовать маскированный массив в numpy .ndarray, заполнив маскированные значения «0», но кажется, что массив numpy также не вызывается. Я также не уверен, что заполнение этих маскированных значений «0» было бы хорошей идеей, однако я хотел проверить, смогу ли я создать выходной график (что я не смог).

Кто-нибудь знаете, что я могу делать неправильно? Кроме того, сможет ли кто-нибудь дать представление о том, какая команда (pcolor, pcolorme sh, fcontour?) Позволит мне построить изображение, когда будет найдено решение этой ошибки. Из того, что мне удалось собрать на inte rnet, похоже, что проблема может быть больше связана с самим файлом NEXRAD NetCDF, а не с кодом, размещенным ниже.

Любые ссылки, знания и / или другая помощь приветствуется. Приношу свои извинения, если этот пост содержит слишком много и / или не относящихся к делу деталей.

1 Ответ

1 голос
/ 15 января 2020

У вас есть пространство имен cla sh. map - это стандартная функция Python, которая принимает две функции и запускает вывод одной функции на вход другой функции, склеивая их вместе.

Вы повторно использовали map в качестве имени переменной , Измените имя вашей переменной.

...