我想从我拥有的netcdf文件中绘制南极洲的表面高程,但是要掩盖海洋。因此,我使用了“maskoceans”。但是,使用它时,外翻是白色的。如果我查看创建的蒙版,它在任何地方都写成“真”,因此它无法识别海洋表面。此外,与陆地/海洋掩模相关联的创建阵列是空的。我不明白发生了什么。我尝试过其他底图投影,但问题仍然是一样的。我也使用投影坐标。
我用drawlsmask进行了测试:
最后,我遇到的最后一个问题是lon = 180°的平淡空间(一条线)仍然存在。
我希望有人能够帮助我,并提前感谢那些愿意尝试的人。
这是我的代码:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import numpy as np
import cdms2 as cdms
import cdtime
from mpl_toolkits.basemap import Basemap,shiftgrid,maskoceans
import matplotlib.pyplot as plt
##################################################
path='/home/dryas/Sentia/data_ECHAM/T106.surf_height.nc'
var='geosp'
tstart=cdtime.comptime(1960,1,1,0,1,0)
tstop=cdtime.comptime(2013,1,1,23,59)
#Extraction
f=cdms.open(path)
var=f(var)
f.close
lat=var.getLatitude()
lon=var.getLongitude()
timax=var.getTime()
timax.getBounds()
timax.asComponentTime()
var=var(time=(tstart,tstop))
var=var[0,:,:]
var=var.filled()
#Map
fig=plt.figure()
m=Basemap(projection='spstere',boundinglat=-60,lon_0=-180,resolution='l')
lons,lats=np.meshgrid(lon,lat)
x,y=m(lons,lats)
mdata=maskoceans(x,y,var,resolution='h',grid=1.25,inlands=True)
cs=m.contourf(x,y,mdata)
cbar=m.colorbar(cs,location='right')
cbar.set_label('surface elevation (m)')
m.drawcoastlines()
m.drawmapboundary()
m.drawparallels(np.arange(-90.,90.,10.),labels=[1,0,0,0],fontsize=10)
m.drawmeridians(np.arange(-180,180,30.),labels=[0,0,0,1],fontsize=10)
plt.title('Surface Elevation')
plt.show()
答案 0 :(得分:0)
好吧,我已经设法在180°填满空白区域:
var=f(var,longitude=(0,360,'cc'))
但是我仍然无法掩盖海洋:(
有人帮忙吗?
Sentia
答案 1 :(得分:0)
我已经用maskoceans解决了这个问题:
我把x,y坐标放在了maskxans中而不是lats lons中。现在它工作=)