gpt4 book ai didi

python - Cartopy 中 pcolormesh 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:34 27 4
gpt4 key购买 nike

我正在尝试调整 Cartopy example plot将圆形南极立体图绘制到北极并向其添加数据。我有几个问题。

首先,在示例代码中,陆地特征添加在海洋特征之前。当我这样做时,我得到了一张只有海洋的 map 。我颠倒了下面代码中的调用顺序,得到了一张包含陆地和海洋的 map 。为什么其他订单适用于南极示例?

其次,更重要的是,我不明白为什么我的 pcolormesh 调用没有任何效果。

我正在使用 Python 2.7.7、matplotlib 1.5.1 和 Cartopy 0.15.1。

import matplotlib.path as mpath
import matplotlib.pyplot as plt
import numpy as np

import cartopy.crs as ccrs
import cartopy.feature

lats = np.linspace(60,90,30)
lons = np.linspace(0,360,200)
X,Y = np.meshgrid(lons,lats)
Z = np.random.normal(size = X.shape)

def main():
fig = plt.figure(figsize=[10, 5])
ax = plt.subplot(1, 1, 1, projection=ccrs.NorthPolarStereo())
fig.subplots_adjust(bottom=0.05, top=0.95,
left=0.04, right=0.95, wspace=0.02)

# Limit the map to -60 degrees latitude and below.
ax.set_extent([-180, 180, 60, 60], ccrs.PlateCarree())

ax.gridlines()

ax.add_feature(cartopy.feature.OCEAN)
ax.add_feature(cartopy.feature.LAND)

# Compute a circle in axes coordinates, which we can use as a boundary
# for the map. We can pan/zoom as much as we like - the boundary will be
# permanently circular.
theta = np.linspace(0, 2*np.pi, 100)
center, radius = [0.5, 0.5], 0.5
verts = np.vstack([np.sin(theta), np.cos(theta)]).T
circle = mpath.Path(verts * radius + center)

ax.set_boundary(circle, transform=ax.transAxes)
ax.pcolormesh(X,Y,Z,transform=ccrs.PlateCarree())


plt.show()


if __name__ == '__main__':
main()

最佳答案

您的代码让 cartopy 决定 map 上特征图的顺序,因此,某些特征可能会被隐藏而没有任何线索。可以明确指定图的顺序。

特征图的顺序由 zorder 控制,在大多数绘图语句中可以用 zorder=integer 指定。这是一个修改后的代码,可以产生更好的情节。

# your data
lats = np.linspace(60, 90, 30)
lons = np.linspace(0, 360, 160)
X,Y = np.meshgrid(lons, lats)
Z = np.random.normal(size = X.shape)

# new data for pcolormesh plot
latz = np.linspace(75, 90, 15)
lonz = np.linspace(0, 360, 160)
X1,Y1 = np.meshgrid(lonz, latz)
Z1 = np.random.normal(size = X1.shape)

def main():
fig = plt.figure(figsize=[10, 10])
ax = plt.subplot(1, 1, 1, projection=ccrs.NorthPolarStereo())
fig.subplots_adjust(bottom=0.05, top=0.95,
left=0.04, right=0.95, wspace=0.02)

# Limit the map to -60 degrees latitude and below.
ax.set_extent([-180, 180, 60, 60], ccrs.PlateCarree())

ax.gridlines()

# zorder can be used to arrange what is on top
ax.add_feature(cartopy.feature.LAND, zorder=4) # land is specified to plot above ...
ax.add_feature(cartopy.feature.OCEAN, zorder=1) # ... the ocean

# Compute a circle in axes coordinates, which we can use as a boundary
# for the map. We can pan/zoom as much as we like - the boundary will be
# permanently circular.
theta = np.linspace(0, 2*np.pi, 100)
center, radius = [0.5, 0.5], 0.5
verts = np.vstack([np.sin(theta), np.cos(theta)]).T
circle = mpath.Path(verts * radius + center)

ax.set_boundary(circle, transform=ax.transAxes)
# pcolormesh is specified to plot on top of the ocean but below land
ax.pcolormesh(X1, Y1, Z1, transform=ccrs.PlateCarree(), zorder=3)

plt.show()

if __name__ == '__main__':
main()

enter image description here

关于python - Cartopy 中 pcolormesh 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44980632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com