使用plt.savefig保存绘图时纬度标签不显示但经度正常问题求解
问题原因
- 你代码中
plt.savefig()传入的bbox_inches='tight'参数是核心诱因:该参数会自动裁剪图片边缘空白,但Cartopy的gridliner生成的纬度标签属于轴外装饰元素,matplotlib自动计算裁剪边界时无法正确识别这部分内容,直接把左侧的纬度标签裁掉了。 - 你初始化画布时用gridspec设置的
left=0.15预留的左侧边距不足,在savefig输出300dpi的高分辨率图片时,标签被挤压到画布可视范围外。 - Jupyter Notebook的
%matplotlib inline渲染逻辑和savefig的文件渲染逻辑是独立的,所以会出现Notebook显示正常、存图丢失标签的差异。
解决方法
- 移除
plt.savefig()中的bbox_inches='tight'参数,避免自动裁剪误删标签。 - 调大gridspec的left参数到0.2左右,给左侧纬度标签预留足够的显示空间,可根据实际显示效果微调数值。
- 存图前添加
fig.canvas.draw()强制渲染所有元素,保证gridliner标签的位置被正确计算后再保存。
修改后的核心代码片段
# 调整gridspec左侧边距 spec = gridspec.GridSpec(ncols=2, nrows=4,figure=fig,left=0.2,bottom=0.1,right=0.7,top=0.9) # 所有绘图逻辑结束后,先强制渲染再存图 fig.canvas.draw() plt.savefig("***.jpg",dpi=300,pad_inches=0.15)
内容的提问来源于stack exchange,提问作者Lin Lin
相关产品推荐
相关产品推荐

