在Python中绘制2级NEXRAD雷达数据-TypeError:'MaskedArray'对象不可调用

问题描述 投票:0回答:1

Hello StackOverflow社区,

我是Python新手(Python 3.8.1),他正在寻求一些帮助来绘制底图顶部绘制的NEXRAD 2级雷达图像,这些图像是我从NOAA天气和气候工具包(我相信是已磨碎的NetCDF3文件)中导出的我已经使用底图1.2.1创建了。我正在使用Jupyter Notebook通过终端窗口(Mac OS Mojave 10.14.6)上的miniconda运行代码。

这是我的代码的第一部分,它定义了底图,并成功地将其与海岸线和纬度/经度线一起绘制(请注意,底图声明的坐标将地块限制在南加州)。

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)

现在是我代码的第二部分,该部分旨在读取从NOAA天气与气候工具包导出的网格化NetCDF3 NEXRAD文件(注意:文件只有一个时间步长)。代码在进行任何绘图之前停止。

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

我找到了一篇很棒的博客文章,内容涉及使用python here绘制NetCDF文件。帖子的作者使用发生错误的行将NetCDF文件的经纬度坐标与底图投影中的坐标相匹配。但是,当我尝试执行此操作时,出现错误"TypeError: 'MaskedArray' object is not callable"。我尝试通过用“ 0”填充掩码值来将掩码数组转换为numpy.ndarray,但似乎numpy数组也是不可调用的。我也不确定用“ 0”填充这些掩码值是否是个好主意,但是我想测试一下是否可以生成输出图(我不能)。

有人会知道我做错了什么吗?此外,一旦找到解决该错误的方法,任何人都将能够洞悉什么命令(pcolor,pcolormesh,fcontour?)允许我绘制图像。根据我在互联网上收集到的信息,似乎该问题可能与NEXRAD NetCDF文件本身有关,而不是与下面发布的代码有关。

感谢任何链接,知识和/或其他帮助。如果这篇文章提供过多和/或不相关的信息,我深表歉意。

python arrays matplotlib netcdf
1个回答
1
投票

您有名称空间冲突。 map是Python标准函数,它接受两个函数并将一个函数的输出运行到另一个函数的输入中,从而将它们粘合在一起。]

您已将map重用为变量名。更改变量名。

© www.soinside.com 2019 - 2024. All rights reserved.