这似乎应该是一个简单的修复,但我无法让它工作。我希望在附加的图中显示40°N,但是将drawparallels中的labels参数设置为[1,0,1,1]并不是诀窍。这应该根据文档绘制它们与图的左侧,顶部和底部相交的平行标记。我还想在0°再次出现在右下角。我知道如何解决这两个问题?
from netCDF4 import Dataset as NetCDFFile
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap
from mpl_toolkits.basemap import addcyclic
nc = NetCDFFile('C:/myfile.nc')
lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
time = nc.variables['time'][:]
olr = nc.variables['olr'][:]
olr,lon = addcyclic(olr,lon)
map = Basemap(llcrnrlon=0.,llcrnrlat=-40.,urcrnrlon=360.,urcrnrlat=40.,resolution='l')
lons,lats = np.meshgrid(lon,lat)
x,y = map(lons,lats)
levels = np.arange(-19.5,20.0,0.5)
levels = levels[levels!=0]
ticks = np.arange(-20.0,20.0,4.0)
cs = map.contourf(x,y,olr[0],levels, cmap='bwr')
cbar = plt.colorbar(cs, orientation='horizontal', cmap='bwr', spacing='proportional', ticks=ticks)
cbar.set_label('Outgoing Longwave Radiation Anomalies $\mathregular{(W/m^2)}$')
map.drawcoastlines()
map.drawparallels(np.arange(-40,40,20),labels=[1,0,1,1], linewidth=0.5, fontsize=7)
map.drawmeridians(np.arange(0,360,40),labels=[1,1,0,1], linewidth=0.5, fontsize=7)
答案 0 :(得分:1)
问题的第一部分很简单。为了显示标签,您必须实际绘制平行线,但np.arange(-40,40,20)
不包括40
。因此,如果您将该语句更改为np.arange(-40,41,20)
,则会显示40N
标签。
第二部分原则上应该以相同的方式解决,但是Basemap显然使用经度的模来计算标签的位置,因此在绘制经线时只使用np.arange(0,361,40)
将导致两个{ {1}}标签相互叠加。但是,我们可以捕获0
生成的标签并手动更改第二个drawmeridians
标签的位置。标签存储在字典中,因此易于处理。为了计算最后一个标签的x位置,我计算第一个和第二个标签之间x位置的差异,将其乘以要绘制的子午线量(360/40)并添加第一个标签的x位置标签。
这里有完整的例子:
0
这里得到的情节:
希望这有帮助。