【问题标题】:Mask Ocean or Land from data using Cartopy使用 Cartopy 从数据中屏蔽海洋或陆地
【发布时间】:2016-07-31 06:21:55
【问题描述】:

我想从全球海面温度数据中屏蔽陆地区域。我正在使用 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()

以上代码绘制数据如下:

我想以此掩盖土地。

【问题讨论】:

  • 请发布您的代码!
  • 请澄清您的问题,我假设您的意思是如何删除与土地质量相关的温度数据?
  • 不,数据实际上只是海洋数据。但是为了有效地进行插值,使用了整个地球。结果,我在陆地上也有海面温度(这是没有意义的)。海面温度是衡量水体温度的指标
  • @Maljam 你是如何编辑我的问题以在问题本身中显示图像的?
  • @Kushal 文本框上方有图片按钮(在{} 按钮旁边)

标签: python matplotlib cartopy


【解决方案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.LAND 更改为cart.feature.OCEAN

【讨论】:

  • 有用的解决方案。但是你能建议使用 cart.feature.LAND 来屏蔽数组中的值,而不是用于绘图吗?
  • 我不确定是否建议使用 cartopy 来屏蔽数组,因为它主要用于可视化。原因是数据的分辨率可能与 cartopy 特征的分辨率不匹配,即使您可以将其提取为数组。我认为最好绘制整个数组并在图中进行掩蔽。希望对您有所帮助。
【解决方案2】:

对于遮蔽土地区域,使用底图会更容易。

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

【讨论】:

  • Basemap 几年来就没有维护过,并且在不因不可能的依赖关系而损害您的环境的情况下安装它是一个巨大的挑战。一个新的 cartopy 解决方案,不仅可以用于绘图,还可以用于计算。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
  • 2021-10-20
  • 2022-11-29
  • 2019-09-26
  • 2018-06-02
  • 2012-02-24
相关资源
最近更新 更多