python - 在 Python 中绘制 2 级 NEXRAD 雷达数据 - TypeError:“MaskedArray”对象不可调用
问题描述
你好 StackOverflow 社区,
我是一名新手 Python 程序员(Python 3.8.1),他正在寻找一些帮助来绘制我从 NOAA 天气和气候工具包(我相信是网格化 NetCDF3 文件)导出的 NEXRAD 2 级雷达图像,并放在我拥有的底图之上使用底图 1.2.1 创建。我正在终端窗口(Mac OS Mojave 10.14.6)上通过 miniconda 使用 Jupyter Notebooks 运行我的代码。
这是我的代码的第一部分,它定义了底图并成功地将其与海岸线和纬度/经度线一起绘制(请注意,底图声明的坐标将地块绑定到南加州)。
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 绘制 NetCDF 文件的精彩博客文章。该帖子的作者使用发生错误的行来将 NetCDF 文件的纬度/经度坐标与底图投影中的坐标相匹配。但是,当我尝试这样做时,我得到了错误"TypeError: 'MaskedArray' object is not callable"
。我尝试通过用“0”填充掩码值将掩码数组转换为 numpy.ndarray,但似乎 numpy 数组也是不可调用的。我也不确定用“0”填充这些掩码值是否是一个好主意,但是我想测试一下是否可以生成输出图(我做不到)。
有人知道我可能做错了什么吗?此外,一旦找到解决此错误的方法,任何人都可以提供有关哪些命令(pcolor、pcolormesh、fcontour?)可以让我绘制图像的见解。从我在互联网上收集到的信息来看,这个问题似乎与 NEXRAD NetCDF 文件本身有关,而不是下面发布的代码。
感谢任何链接、知识和/或其他帮助。如果这篇文章提供了太多和/或不相关的细节,我深表歉意。
解决方案
你有一个命名空间冲突。map
是一个 Python 标准函数,它接受两个函数并将一个函数的输出运行到另一个函数的输入中,从而将它们粘合在一起。
您已重用map
作为变量名。更改您的变量名称。
推荐阅读
- julia - 如何在 Julia 中将可能是“无”的变量插入字符串?
- javascript - 删除字符串的开头直到找到一个字符
- perl - 使用 Perl Module::Build 在项目上指定 shebang
- php - 将文件添加到 zip 并使用 php 下载 zip
- firebase - Firestore:com.google.cloud.firestore.CollectionReference.where() 不工作
- php - 下拉年份显示去年两次
- ajax - ajax表单没有提交,只是刷新了,什么都没有
- python - Python:制作偏离中心的极坐标图?
- r - 将 R 数据帧转换为时间序列
- menu - 如何在 Electron 中将 MenuItem 分离到它自己的模块中?