maskoceans без океана в маске и без данных

Я хотел бы построить рельеф поверхности Антарктиды из файлов netcdf, которые у меня есть, но маскируя океан. Поэтому я использовал "маскокеаны". Однако при его использовании все белое. Если я смотрю на созданную маску, то везде написано «Истина», значит, она не распознала поверхность океанов. Более того, созданный массив, связанный с маской земли/океана, пуст. Я не понимаю, что происходит. Я пробовал с другими проекциями базовой карты, но проблема все та же. Я также использую спроецированные координаты.

Я сделал тесты с помощью drawlsmask:

  1. Без использования maskoceans просто пустое пространство при lon=180° (еще одна проблема!) заполняется указанными цветами.
  2. Используя maskoceans, правильно заполнить сушу и океан.

Наконец, последняя проблема, с которой я столкнулся, заключается в том, что остается пустое пространство (линия) при 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()

Карта без использования maskoceans


person Sentia Goursaud    schedule 08.12.2015    source источник


Ответы (2)


Что ж, мне удалось заполнить пустое пространство на 180°:

var=f(var,longitude=(0,360,'cc'))

Однако я все еще не могу замаскировать океан :(

Кто-нибудь поможет?

Сентия

person Sentia Goursaud    schedule 10.12.2015

Я решил проблему с maskoceans:

Я поместил координаты x, y в maskoceans вместо lats lons. Теперь работает =)

person Sentia Goursaud    schedule 10.12.2015