2016-04-10 11 views
-1

Ich möchte das Land-Gebiet von Meeresoberfläche Temperaturdaten über den Globus zu maskieren. Ich verwende Cartopy, um die Daten zu plotten.Maske Ozean oder Land von Daten mit Cartopy

import numpy as np 
import matplotlib.pyplot as plt 
import cartopy.crs as ccrs 
from netCDF4 import Dataset 

f = Dataset('sst.mnmean.nc') 
sst = f.variables['sst'][0,:,:] 
lats = f.variables['lat'][:] 
lons = f.variables['lon'][:] 

ax = plt.axes(projection=ccrs.PlateCarree()) 
ax.coastlines() 
plot = ax.contourf(lons, lats, sst, 60, transform=ccrs.PlateCarree()) 
cb = plt.colorbar(plot) 
plt.show() 

Die obigen Code Grunddaten wie folgt aus:
enter image description here

Ich möchte das Land von dieser auszublenden.

+0

Bitte schreiben Sie Ihren Code! – Signal

+0

Bitte klären Sie Ihre Frage, ich nehme an, Sie meinen, wie die Temperaturdaten im Zusammenhang mit Landmasse entfernt werden? – Maljam

+0

Nein, die Daten sind eigentlich nur Ozeandaten. Um aber effektiv interpoliert zu werden, wird der ganze Globus benutzt. Als Ergebnis habe ich auch die Oberflächentemperatur der Erde über Land (was bedeutungslos ist). Meeresoberflächentemperaturen ist ein Maß für die Temperatur nur über die Gewässer – Kushal

Antwort

1

Ich ging durch die cartopy Dokumentation und kam über die Methode aufgerufen add_feature. Der Code lautet wie folgt:

import numpy as np 
import matplotlib.pyplot as plt 
import cartopy as cart 
from mpl_toolkits.basemap import Basemap 
from netCDF4 import Dataset 

f = Dataset('sst.mnmean.nc') 
sst = f.variables['sst'][0,:,:] 
lats = f.variables['lat'][:] 
lons = f.variables['lon'][:] 

ax = plt.axes(projection=cart.crs.PlateCarree()) 
ax.coastlines() 
ax.add_feature(cart.feature.LAND, zorder=100, edgecolor='k') 
ax.set_global() 
plot = ax.contourf(lons, lats, sst, 60, transform=cart.crs.PlateCarree()) 
cb = plt.colorbar(plot) 
plt.show() 

Das Grundstück jetzt wie this aussieht. Um die Ozeane zu maskieren, ändern Sie cart.feature.LAND zu cart.feature.OCEAN

-1

Zum Maskieren des Landbereichs wäre es einfacher, basemap zu verwenden.

from mpl_toolkits.basemap import Basemap 
map = Basemap(projection='mill',lon_0=180) # create projection 
....          # whatever processing needed 
map.fillcontinents(color='coral')   # mask land mass 

See basemap example here