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

Python绘制雪盖参数趋势图:无趋势色及阴影样式定制问题求助

问题解决与代码修改

核心问题分析

  1. 趋势色层被遮挡:原代码中ax.contourf的参数设置逻辑错误,alpha=0会让阴影层完全透明但仍可能覆盖下方趋势色,且未设置填充透明属性。
  2. 阴影样式无法自定义:仅指定了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:34:57