You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子图面板中最后一幅图的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:56:13