Cartopy中set_extent设置地图范围未按预期生效的问题咨询
问题原因与解决方法
问题根源
你遇到的问题是因为ax.set_extent()默认使用当前轴的投影坐标系(即你创建ax时指定的ccrs.PlateCarree(central_longitude=0))解析传入的extent参数。当设置的经度范围为-180到60时,跨度达到240°(超过半个地球的180°),Cartopy会自动选择最小的连续包围区域,将范围翻转成60到-180(对应东经60°到西经180°),这和你预期的西经180°到东经60°完全相反,导致看起来extent设置未生效。
解决方法
调用set_extent时,明确指定crs参数为地理坐标系ccrs.PlateCarree(),强制Cartopy按照传入的经纬度(地理坐标)限制视图,而非使用轴的投影坐标系解析:
修改后的关键代码:
extent = (-180, 60, 0, 60) ax.set_extent(extent, crs=ccrs.PlateCarree()) # 新增crs参数
完整代码示例:
import matplotlib.pyplot as plt from cartopy import crs as ccrs, feature as cfeature import cartopy.io.shapereader as shpreader fig = plt.figure(figsize=(11, 11)) ax = plt.subplot(1, 1, 1, projection=ccrs.PlateCarree(central_longitude=0)) ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=1, color='gray', alpha=0.5, linestyle='--') extent = (-180, 60, 0, 60) ax.set_extent(extent, crs=ccrs.PlateCarree()) # 指定地理坐标系 ax.add_feature(cfeature.LAND , linewidth=0.5, edgecolor='black') plt.show()
这样就能正确显示西经180°到东经60°、北纬0°到60°的区域。
内容的提问来源于stack exchange,提问作者Michael Dorner
相关产品推荐
相关产品推荐

