如何移除Cartopy/Matplotlib绘图中额外出现的边框与坐标轴?
解决方案
问题根源
你代码中重复创建了坐标轴对象:调用plt.subplots(figsize=(8,6))时已经生成了一个默认的笛卡尔坐标系坐标轴,后续又通过plt.axes(projection=proj)新建了北极投影坐标轴叠在上方。你之前所有隐藏边框的代码仅作用于上层的投影轴,底层未处理的默认轴就是残留0-1范围外层边框的原因。
修复方案
方案1:创建子图时直接指定投影(推荐)
不需要二次创建坐标轴,在生成子图时直接传入投影参数即可,完整修改后代码如下:
import matplotlib.pyplot as plt import cartopy.crs as ccrs # 设置投影信息 proj = ccrs.NorthPolarStereo(true_scale_latitude = 75) # 创建画布和子图时直接指定投影 fig, ax = plt.subplots(figsize=(8,6), subplot_kw={'projection': proj}) ax.coastlines('10m') ax.set_extent([-180, 180, 65, 90], crs=ccrs.PlateCarree())
方案2:手动隐藏多余的默认坐标轴
如果不想调整原有创建逻辑,在创建完投影坐标轴后,手动隐藏底层的默认轴即可:
import matplotlib.pyplot as plt import cartopy.crs as ccrs # 设置投影信息 proj = ccrs.NorthPolarStereo(true_scale_latitude = 75) fig, ax = plt.subplots(figsize=(8,6)) ax = plt.axes(projection=proj) # 隐藏第一个生成的默认坐标轴 fig.axes[0].set_visible(False) ax.coastlines('10m') ax.set_extent([-180, 180, 65, 90], crs=ccrs.PlateCarree())
两种方案都可以完全移除外层多余的边框和坐标轴,不需要额外调用你之前试过的spines隐藏、axis off之类的代码。
内容的提问来源于stack exchange,提问作者cgxvi
相关产品推荐
相关产品推荐

