You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一张画布中绘制两个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 16:45:03