如何在Cartopy主地图的右上角嵌入另一幅Cartopy小地图
如何在Cartopy主地图的右上角嵌入另一幅Cartopy小地图
嘿,这事儿不难!你可以借助Matplotlib的内嵌坐标轴功能,把小地图直接放到主地图的右上角。我把你的两段代码整合并修改成了完整的实现方案,一起来看看:
首先,我们需要补全所有必要的导入(你原来的代码里漏了几个关键库):
import matplotlib.pyplot as plt import cartopy.crs as ccrs # 记得确保df1已经被正确导入哦,比如通过pandas读取数据
然后是完整的代码实现:
# 设置主地图的Mercator投影,调整阈值让海岸线更平滑 use_proj = ccrs.Mercator() use_proj._threshold /= 20. # 创建主画布和主地图坐标轴 fig, ax1 = plt.subplots(1, 1, subplot_kw={'projection': use_proj}, figsize=(7,7), gridspec_kw={'wspace': 0.2, 'hspace': 0.2}) # 绘制主地图内容 ax1.set_extent([-50.0, 45.0, 30.0, 70.0]) ax1.coastlines('50m', color='black') # 绘制蓝色矩形区域 ax1.plot([-19, 40, 40, -19, -19], [35, 35, 73, 73, 35], color='blue', linewidth=2.5, transform=ccrs.PlateCarree(), label='Pressure') # 绘制红色温度点 ax1.scatter(x=12.5683, y=55.6761, color="red", s=12, alpha=0.9, transform=ccrs.PlateCarree(), label='Temperature') # 创建右上角的内嵌小坐标轴:参数是[左位置, 下位置, 宽度, 高度],数值为相对主坐标轴的比例 ax_inset = ax1.inset_axes([0.7, 0.7, 0.25, 0.25], projection=ccrs.Mercator()) # 绘制小地图的细节内容 ax_inset.set_extent([10, 15, 54, 57]) ax_inset.coastlines('10m', color='black') # 用更高分辨率的海岸线展示细节 # 绘制蓝色散点 ax_inset.scatter(x=df1.longitude, y=df1.latitude, color="dodgerblue", s=12, alpha=0.9, transform=ccrs.PlateCarree()) # 可选:添加主地图与小地图的区域连接线,让读者清晰看到小地图对应的放大区域 ax1.indicate_inset_zoom(ax_inset, edgecolor='red') # 显示图例和图像 ax1.legend() plt.show()
关键部分说明:
ax1.inset_axes([0.7, 0.7, 0.25, 0.25], projection=ccrs.Mercator()):这行是核心,前两个参数0.7,0.7定位小轴左下角在主轴70%宽、70%高的位置,后两个0.25,0.25设置小轴尺寸为主轴的25%,刚好落在右上角;同时指定Mercator投影,保证坐标系统统一。ax1.indicate_inset_zoom(ax_inset, edgecolor='red'):这个可选功能会在主地图上画出小地图对应的矩形范围,并用红线连接到小地图,直观展示放大区域的对应关系。- 小地图用了
10m分辨率的海岸线,比主地图的50m更精细,符合局部放大的需求。
如果需要调整小地图的位置或大小,只需要修改inset_axes的四个比例参数就行啦!
备注:内容来源于stack exchange,提问作者lola
相关产品推荐
相关产品推荐

