Python绘制雪盖参数趋势图:无趋势色及阴影样式定制问题求助
问题解决与代码修改
核心问题分析
- 趋势色层被遮挡:原代码中
ax.contourf的参数设置逻辑错误,alpha=0会让阴影层完全透明但仍可能覆盖下方趋势色,且未设置填充透明属性。 - 阴影样式无法自定义:仅指定了
hatches样式,缺少阴影线颜色、密度的控制参数。
修改后的完整代码
# 提取趋势与p值的xarray数据集 data = data_dic['ESA_GF']['scf_monthly_value'].loc[{'month':1}] data = data.where(data['scf_monthly_value']>1) slope = data.scf_monthly_value_slope * 10 # 合并乘法操作简化代码 pvalue = data.scf_monthly_value_p # 标记趋势不显著的区域(p>0.05) insig_mask = pvalue > 0.05 # 绘图设置 fig, ax = plt.subplots(nrows=1, ncols=1, subplot_kw={'projection': ccrs.PlateCarree()}, figsize=(14,7)) # 直接在这里设置画布尺寸 plt.subplots_adjust(wspace=0.17, hspace=0.2) # 第一步:绘制趋势斜率的颜色层 slope.plot(ax=ax, cmap=cmap_init, add_colorbar=True) # 显式添加色条(按需选择) # 第二步:在不显著区域添加自定义阴影 # 使用xarray自带的plot.contourf适配数据集,避免坐标错位 insig_mask.plot.contourf( ax=ax, hatches=['//////'], # 斜杠数量越多,阴影密度越高,也可换'xxx'/'---'等样式 facecolor='none', # 填充透明,仅保留阴影线 edgecolor='gray', # 自定义阴影线颜色 linewidth=0.5, # 调整阴影线粗细 add_colorbar=False # 不需要该mask的色条 ) # 可选:添加地图基础要素让可视化更完整 ax.coastlines() ax.gridlines(draw_labels=True)
关键修改说明
- 趋势色层显示:先绘制
slope颜色层,再叠加阴影层;若cmap_init未定义,可替换为matplotlib内置色条如'RdBu_r'。 - 阴影自定义:
- 通过增加
hatches内的符号数量调整阴影密度,支持多种样式符号 edgecolor设置阴影线的颜色,linewidth控制线条粗细facecolor='none'保证填充区域完全透明,不遮挡下方趋势色
- 通过增加
- 坐标适配:用xarray原生的
plot.contourf处理mask,避免手动transpose可能导致的坐标匹配问题 - 尺寸设置:直接在
plt.subplots中通过figsize指定画布尺寸,替代可能未定义的set_size函数
内容的提问来源于stack exchange,提问作者CHAABANI Hamid
相关产品推荐
相关产品推荐

