子图面板中最后一幅图的contourf hatching失效问题求助
排查Basemap子图中DJF图hatching不显示的问题
以下是几个常见的排查方向和解决方法:
1. 检查contourf的levels参数是否匹配DJF_sig的取值
如果DJF_sig中需要标记的区域值为2,要确保contourf的levels参数刚好包含这个值的区间。比如前两幅图的levels设置正确覆盖了目标值,但DJF的levels可能没对应上:
# 先确认DJF_sig的唯一值,确保包含2 import numpy as np print(np.unique(DJF_sig)) # 针对值为2的区域,设置levels为包含该值的区间 levels = [1.5, 2.5] # 绘制hatching时,设置colors='none'只显示填充图案,edgecolor控制线条颜色 cs = m.contourf(lon, lat, DJF_sig, levels=levels, hatches=['///'], colors='none', edgecolor='black')
2. 排查图层顺序(zorder)冲突
DJF图的hatching可能被Basemap的底图元素(如海岸线、陆地填充)覆盖。可以通过调整zorder参数让hatching显示在顶层:
# 给contourf设置更高的zorder,比如高于海岸线 cs = m.contourf(lon, lat, DJF_sig, levels=levels, hatches=['///'], colors='none', edgecolor='black', zorder=5) # 同时让海岸线等元素的zorder低于hatching m.drawcoastlines(zorder=4) m.fillcontinents(color='white', zorder=3)
3. 确认Basemap投影与坐标轴范围一致
如果DJF子图的Basemap投影范围、坐标轴范围和前两幅图不一致,可能导致hatching区域被裁剪或未落在可视范围内:
# 确保DJF子图的Basemap参数和前两幅完全一致 m_djf = Basemap(projection='merc', llcrnrlat=-60, urcrnrlat=90, llcrnrlon=-180, urcrnrlon=180, resolution='l') # 或者手动强制设置坐标轴范围 plt.xlim(m_djf.lonmin, m_djf.lonmax) plt.ylim(m_djf.latmin, m_djf.latmax)
4. 单独测试DJF图的hatching绘制
先脱离子图布局,单独绘制DJF图,排查是否是子图布局导致的问题:
plt.figure(figsize=(8,6)) m = Basemap(projection='merc', llcrnrlat=-60, urcrnrlat=90, llcrnrlon=-180, urcrnrlon=180, resolution='l') m.drawcoastlines() m.contourf(lon, lat, DJF_sig, levels=[1.5,2.5], hatches=['///'], colors='none', edgecolor='black') plt.show()
如果单独绘制能显示hatching,再检查子图布局中是否有subplot的参数(如sharex/sharey)导致坐标轴范围被强制修改。
内容的提问来源于stack exchange,提问作者Hwa Jin Choi
相关产品推荐
相关产品推荐

