Cartopy如何实现坐标轴刻度外侧显示?默认移除刻度问题求助
问题原因
你调用ax.gridlines(draw_labels=True)时,Cartopy会自动禁用Matplotlib原生坐标轴的刻度与标签体系,改用gridlines内置的标注方案,这套方案不支持生成轴外侧的刻度线,因此你对ax.tick_params的修改不会生效。
解决方案
放弃使用gridlines的内置标签功能,改用Matplotlib原生轴刻度体系搭配Cartopy的经纬度格式化工具即可实现需求,完整可运行代码如下:
import matplotlib.pyplot as plt import cartopy.crs as ccrs from cartopy.mpl.ticker import (LongitudeFormatter, LatitudeFormatter, LatitudeLocator, LongitudeLocator) fig, ax = plt.subplots(figsize=(10, 5), subplot_kw={"projection":ccrs.PlateCarree()}) ax.coastlines() # 绘制网格线(不需要可以删除) ax.gridlines(crs=ccrs.PlateCarree(), linewidth=2, color='gray', alpha=0.5, linestyle='--') # 自动获取经纬度刻度位置 lon_locator = LongitudeLocator() lat_locator = LatitudeLocator() ax.set_xticks(lon_locator(), crs=ccrs.PlateCarree()) ax.set_yticks(lat_locator(), crs=ccrs.PlateCarree()) # 设置经纬度格式化器 ax.xaxis.set_major_formatter(LongitudeFormatter(auto_hide=False)) ax.yaxis.set_major_formatter(LatitudeFormatter()) # 设置刻度向外显示 ax.tick_params(axis="both", tickdir='out', length=15) # 隐藏上侧、左侧的刻度和标签,和你原代码的效果保持一致 ax.tick_params(axis='x', top=False, labeltop=False) ax.tick_params(axis='y', left=False, labelleft=False) plt.show()
补充说明
- 如果需要自定义刻度位置,直接替换
lon_locator()、lat_locator()为你指定的刻度值列表即可 - 上述代码兼容PlateCarree等支持直角坐标轴的投影,极射投影等非线性投影仍需使用gridlines的内置标注功能
内容的提问来源于stack exchange,提问作者Khalil Al Hooti
相关产品推荐
相关产品推荐

