如何在Python空间趋势图上添加p<0.05显著性黑点/圆点标记
实现显著性标记叠加的解决方案
核心思路
你已经得到了和slope维度一致的p_value数组,只需筛选出p<0.05的像素对应的经纬度坐标,通过scatter函数将圆点标记叠加到已有的slope空间图层上即可。
完整代码示例
import numpy as np import matplotlib.pyplot as plt # 初始化画布 fig, ax = plt.subplots(figsize=(10, 6)) # 原有的slope空间分布图绘制逻辑 slope_plot = ax.pcolormesh(lon, lat, slope, cmap='RdBu_r') plt.colorbar(slope_plot, ax=ax, label='变化趋势斜率') # 生成二维经纬度网格(若你的lat、lon本身就是二维网格可跳过该步) lon_grid, lat_grid = np.meshgrid(lon, lat) # 筛选p<0.05的显著性区域 significance_mask = p_value < 0.05 sig_lons = lon_grid[significance_mask] sig_lats = lat_grid[significance_mask] # 叠加显著性圆点标记 ax.scatter( sig_lons, sig_lats, s=8, # 圆点大小,可根据像素密度调整 c='black', # 圆点填充色,和背景对比度不够可改为白色'white' marker='o', edgecolors='none' # 不需要边框可以设为none ) # 可选:添加坐标轴与标题设置 ax.set_xlabel('经度') ax.set_ylabel('纬度') ax.set_title('空间变化趋势及显著性分布(p<0.05)') plt.show()
常用调整建议
- 若标记点过密:可减小
s参数,或改用更小的标记marker='.' - 若需要区分正负趋势的显著性:可将
c参数设为对应位置的slope值,和主图使用相同的色标:ax.scatter(sig_lons, sig_lats, s=8, c=slope[significance_mask], cmap='RdBu_r', vmin=slope_plot.get_clim()[0], vmax=slope_plot.get_clim()[1]) - 若需要增加标记辨识度:可添加细边框,设置
edgecolors='white'、linewidths=0.2即可
内容的提问来源于stack exchange,提问作者hbkumar
相关产品推荐
相关产品推荐

