撇号投影随着不同的数据/意外行为而变化

时间:2018-02-23 16:01:20

标签: python matplotlib cartopy

我正在从底图迁移到cartopy,所以我仍然试图找到绳索!如果我在投影上绘制一些数据,我希望它可以绘制地图,然后将数据绘制在顶部,就像这样

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

latitude = np.linspace(-90, 90, 180)
longitude = np.linspace(-180,180,360)
data = np.cos(np.deg2rad(latitude[:, np.newaxis])) + np.sin(np.deg2rad(longitude))
crs = ccrs.Orthographic(-30,45) #some sample data

ax1 = plt.subplot(121,projection=crs)
ax1.contourf(longitude, latitude,data, transform=ccrs.PlateCarree())
ax1.coastlines('110m', edgecolor='black', linewidth=0.75)

这将生成包含数据的真实地形投影。但是,如果我将一些数据设为void / nan,则不再绘制相同的域:

data[0:150,:] = np.nan

ax1 = plt.subplot(122,projection=crs)
ax1.contourf(longitude, latitude,data, transform=ccrs.PlateCarree())
ax1.coastlines('110m', edgecolor='black', linewidth=0.75)

plt.show()

从底图,我希望绘制相同的域,但是数据是nan,它只是白色。如何强制cartopy停止对数据进行“自动调整”,并保持相同的投影?

data[0:150,:] = np.nan如何影响下方投影的图片。 提前致谢!我试图用ax1.set_extent([-180, 180, -90, 90], ccrs.PlateCarree())逼迫它,但无济于事。

enter image description here

1 个答案:

答案 0 :(得分:2)

Cartopy总是尝试使域适合数据范围。如果您想查看全局图,请使用ax1.set_global()强制执行此操作:

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

latitude = np.linspace(-90, 90, 180)
longitude = np.linspace(-180,180,360)
data = np.cos(np.deg2rad(latitude[:, np.newaxis])) + np.sin(np.deg2rad(longitude))
crs = ccrs.Orthographic(-30,45) #some sample data

ax1 = plt.subplot(121,projection=crs)
ax1.contourf(longitude, latitude,data, transform=ccrs.PlateCarree())
ax1.coastlines('110m', edgecolor='black', linewidth=0.75)

data[0:150,:] = np.nan

ax1 = plt.subplot(122,projection=crs)
ax1.contourf(longitude, latitude,data, transform=ccrs.PlateCarree())
ax1.coastlines('110m', edgecolor='black', linewidth=0.75)
ax1.set_global()

plt.show()