回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想把NOAA地球系统研究实验室物理科学部的日均温度绘制在一张用<code>matplotlib</code><code>Basemap</code>绘制的地图上。在</p>
<p>数据集可以作为netCDF文件从<a href="https://www.esrl.noaa.gov/psd/thredds/fileServer/Datasets/ncep.reanalysis.dailyavgs/surface/air.sig995.2018.nc" rel="nofollow noreferrer">here</a>下载。在</p>
<p>但是,我的问题是<code>Basemap</code>似乎没有存储地图的中心(或边界框)坐标,因为后续的超绘只填充了地图的一部分,请参见下图:</p>
<p><a href="https://i.stack.imgur.com/9pbQl.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/9pbQl.png" alt="Map"/></a></p>
<p>生成图形的代码如下:</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import netCDF4
# to check whether a file exists (before downloading it)
import os.path
import sys
fig1, ax1 = plt.subplots(1,1, figsize=(8,6) )
temperature_fname = 'air.sig995.2016.nc'
url = 'https://www.esrl.noaa.gov/psd/thredds/fileServer/Datasets/ncep.reanalysis.dailyavgs/surface/{0}'.format( temperature_fname)
if not os.path.isfile( temperature_fname ):
print( "ERROR: you need to download the file {0}".format(url) )
sys.exit(1)
# read netCDF4 dataset
tmprt_dSet = netCDF4.Dataset( temperature_fname )
# extract (copy) the relevant data
tmprt_vals = tmprt_dSet.variables['air'][:] - 273.15
tmprt_lat = tmprt_dSet.variables['lat'][:]
tmprt_lon = tmprt_dSet.variables['lon'][:]
# close dataset
tmprt_dSet.close()
# use the Miller projection
map1 = Basemap( projection='mill', resolution='l',
lon_0=0., lat_0=0.
)
# draw coastline, map-boundary
map1.drawcoastlines()
map1.drawmapboundary( fill_color='white' )
# draw grid
map1.drawparallels( np.arange(-90.,90.,30.), labels=[1,0,0,0] )
map1.drawmeridians( np.arange(-180.,180.,60.),labels=[0,0,0,1] )
# overplot temperature
## make the longitude and latitude grid projected onto map
tmprt_x, tmprt_y = map1(*np.meshgrid(tmprt_lon,tmprt_lat))
## make the contour plot
CS1 = map1.contourf( tmprt_x, tmprt_y, tmprt_vals[0,:,:],
cmap=plt.cm.jet
)
cbar1 = map1.colorbar( CS1, location='right' )
cbar1.set_label( r'$T$ in $^\circ$C')
plt.show()
</code></pre>
<p>注意:如果我设置<code>lon_0=180</code>一切看起来都很好(只是不是我想要的中间位置)</p>
<p>我有一种感觉,解决方案是非常明显的,我会很感激任何提示我朝这个方向。在</p>