Wie wende ich Erdmerkmale und Land-/Ozeanmasken mit polaren stereografischen Projektionen in Cartopy an?Python

Python-Programme
Anonymous
 Wie wende ich Erdmerkmale und Land-/Ozeanmasken mit polaren stereografischen Projektionen in Cartopy an?

Post by Anonymous »

Ich versuche, meine Daten zu maskieren, um ein Bild mit polaren stereografischen Projektionen zu drucken
fig, ax = plt.subplots(1, 1, figsize=(4, 3.5), subplot_kw={'projection': ccrs.NorthPolarStereo()}, dpi=300)
im = ax.pcolormesh(lon, lat, de, transform=ccrs.PlateCarree(), cmap='viridis')
#添加国界
from cartopy.io.shapereader import Reader
shp = Reader('F:/MASK/global_all_country/global_all_country.shp')
ax.add_geometries(shp.geometries(), crs=ccrs.PlateCarree(), edgecolor='k', linewidths=0.5, facecolor='none')
ax.coastlines(resolution='10m')
#!MASK OCEAN
ax.add_feature(cfeature.NaturalEarthFeature("physical", "ocean", "50m"),
ec="red", fc="yellow", lw=2, alpha=0.4)
#限制经纬度范围
box = [-180, 180, 15, 90]
ax.set_extent(box, crs=ccrs.PlateCarree())
# 添加地理特征---圆形边界
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)
# 添加经纬度网格
gl = ax.gridlines(draw_labels=True, crs=ccrs.PlateCarree(), color='gray', linestyle='--', dms=True,linewidth=0.5,
xlocs = np.arange(-180, 180 + 60, 60), ylocs = np.arange(15, 90 + 15, 15))
gl.top_labels = False
gl.right_labels = False
gl.xlabel_style = {'size': 10}
gl.ylabel_style = {'size': 10}
cbar = fig.colorbar(im, fraction=0.08, pad=0.1, location='bottom', aspect=30,
label=f'ΔAOD',ticks=[0.05, 0.1, 0.2, 0.3, 0.4,.5])
cbar.ax.tick_params(labelsize=10)
plt.show()

aber es hat nicht funktioniert, es sieht so aus, als ob der Ozean die gesamte Nordhalbkugel bedeckt:
Geben Sie hier die Bildbeschreibung ein, während ich versuche, das Land damit zu maskierenax.add_feature(cfeature.NaturalEarthFeature("physical", "land", "10m"), ec="red", fc="yellow", lw=2, alpha=0.4), es scheint genau richtig zu sein:
Geben Sie hier die Bildbeschreibung ein
Ich bin so verwirrt. Wie kann ich den Ozean in polaren stereografischen Projektionen richtig maskieren?
Ist das Maskieren von Daten die einzige Möglichkeit? ?
Ich habe versucht, die Meeresschicht anzupassen, habe aber festgestellt, dass die Form der Meeresmaske nicht übereinstimmt. Ich habe den gleichen Code verwendet, aber mit einer anderen Projektion,
fig, ax = plt.subplots(1, 1, figsize=(4, 3.5), subplot_kw={'projection': ccrs.PlateCarree()}, dpi=300)
im = ax.pcolormesh(lon, lat, de, transform=ccrs.PlateCarree(), cmap='viridis')
#添加国界
from cartopy.io.shapereader import Reader
shp = Reader('F:/MASK/global_all_country/global_all_country.shp')
ax.add_geometries(shp.geometries(), crs=ccrs.PlateCarree(), edgecolor='k', linewidths=0.5, facecolor='none')
ax.coastlines(resolution='10m')
ax.add_feature(cfeature.NaturalEarthFeature("physical", "ocean", "50m"),
ec="red", fc="yellow", lw=2, alpha=0.4)
#限制经纬度范围
box = [-180, 180, 15, 90]
ax.set_extent(box, crs=ccrs.PlateCarree())
# 添加经纬度网格
gl = ax.gridlines(draw_labels=True, crs=ccrs.PlateCarree(), color='gray', linestyle='--', dms=True,linewidth=0.5,
xlocs = np.arange(-180, 180 + 60, 60), ylocs = np.arange(15, 90 + 15, 15))
gl.top_labels = False
gl.right_labels = False
gl.xlabel_style = {'size': 10}
gl.ylabel_style = {'size': 10}
cbar = fig.colorbar(im, fraction=0.08, pad=0.1, location='bottom', aspect=30,
label=f'ΔAOD',ticks=[0.05, 0.1, 0.2, 0.3, 0.4,.5])
cbar.ax.tick_params(labelsize=10)
plt.show()

es hat funktioniert. Geben Sie hier eine Bildbeschreibung ein

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post