如何在同一张画布中绘制两个cartopy地图子图?代码仅显示第二个图是什么原因?
问题原因
你代码的逻辑错误出在坐标轴创建环节:
- 第一行
fig, (ax1, ax2) = plt.subplots(1,2, figsize=(24, 10))生成的是两个无cartopy投影属性的普通子图,你后续并没有复用这两个子图 - 调用
plt.axes()创建带投影的坐标轴时,该方法默认在整个画布范围内生成覆盖全局的单坐标系,后声明的ax2完全覆盖了先声明的ax1的位置,因此仅能看到第二幅图
修正后代码
正确的做法是在创建子图时直接指定投影属性,无需后续重复新建坐标轴:
import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as ctp # 创建子图时直接传入投影参数 fig, (ax1, ax2) = plt.subplots(1,2, figsize=(24, 10), subplot_kw={'projection': ccrs.PlateCarree()}) fig.suptitle('Comparison of 1970-2000 and 2070-2100 Soil Moisture Content') ax1.set_title('Under SSP245 Scenario') cf1 = ax1.contourf(lon_hist, lat_hist, mrsos_change45, transform=ccrs.PlateCarree(), cmap='BrBG') fig.colorbar(cf1, ax=ax1) ax1.set_aspect('equal', adjustable=None) ax1.add_feature(ctp.feature.BORDERS, linestyle='-', alpha=1) ax1.coastlines(resolution='10m') ax1.add_feature(ctp.feature.OCEAN, zorder=100, edgecolor='k') ax1.gridlines(draw_labels=True) ax2.set_title('Under SSP585 Scenario') cf2 = ax2.contourf(lon_hist, lat_hist, mrsos_change85, cf1.levels, transform=ccrs.PlateCarree(), cmap='BrBG') fig.colorbar(cf2, ax=ax2) ax2.set_aspect('equal') ax2.add_feature(ctp.feature.BORDERS, linestyle='-', alpha=1) ax2.coastlines(resolution='10m') ax2.add_feature(ctp.feature.OCEAN, zorder=100, edgecolor='k') ax2.gridlines(draw_labels=True) plt.show()
内容的提问来源于stack exchange,提问作者USer555
相关产品推荐
相关产品推荐

