2016-04-10 30 views
-1

世界中の海面温度データから土地面積をマスクしたいと思います。私はCartopyを使ってデータをプロットしています。このようなマスクオーシャンまたは土地を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() 

上記のコードをプロットデータ:
enter image description here

私はこれから土地をマスクしたいと思います。

+0

コードを投稿してください。 – Signal

+0

あなたの質問を明確にしてください、私は土地の質量に関連する温度データを削除する方法を意味すると思いますか? – Maljam

+0

いいえ、データは実際には海洋データだけです。しかし、効果的に補間されるために、地球全体が使用されます。その結果、私は土地の上に海面温度も持っています(無意味です)。海面温度は水域だけの温度の尺度です – Kushal

答えて

1

私はcartopyドキュメントを経て、add_featureと呼ばれる方法に出くわしました。次のようにコードは次のとおりです。

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() 

プロットは今thisのように見えます。 海洋を覆うには、cart.feature.LANDcart.feature.OCEANに変更してください。

-1

マスキング領域では、ベースマップを使用する方が簡単です。

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

関連する問題