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文件本身有关,而不是与下面发布的代码有关。
感谢任何链接,知识和/或其他帮助。如果这篇文章提供过多和/或不相关的信息,我深表歉意。
您有名称空间冲突。 map
是Python标准函数,它接受两个函数并将一个函数的输出运行到另一个函数的输入中,从而将它们粘合在一起。]
您已将map
重用为变量名。更改变量名。