python--海温、OLR数据分布做显著性检验,绘制空间分布并打点

简介: 使用python对海洋气象数据做显著性检验,并绘制空间pattern

使用python对海洋气象数据做显著性检验,并绘制空间pattern



选择数据集:

1 SST (Daily Sea Surface Temperature)

NOAA High-resolution Blended Analysis



使用编程工具:

  • python


主要使用函数:


内容:

  • 对2010年的SST和OLR数据分布进行显著性检验,并绘制空间分布
  • 先各自对数据计算一年的趋势以及相关,再计算两个数据之间的相关
  • 绘制空间pattern


具体过程:

  • 1 导入库
  • 2 读取数据
  • 3 计算相关和趋势
  • 4 绘图
  • 5 保存数据


过程还是比较清晰的,直接附上结果,

ps(标题时间打错了、横轴的label也搞错了,懒得重画了,代码中应该没问题了)

image.pngimage.pnge19bc4a34c0d4ec7b66e36114fbf5120.png


SST和OLR的pattern还是比较容易理解的,这两者的相关的空间分布,属实有点没看懂。


  • 图中异常空白处是由于数据存在nan值导致的
  • 包括打的点有些存在缺失,也和数据缺测有关联


最好,还是附上完整的代码吧,也没啥好保留的:


# -*- coding: utf-8 -*-
"""
Created on Sat Oct 22 20:50:09 2022
@author: Administrator
"""
import cartopy.feature as cfeature
import numpy as np
import xarray as xr
from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter
import cmaps
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import matplotlib.ticker as mticker
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from scipy import stats
###############################################################################
olr_path = r'J:/olr.day.mean.nc'
sst_path = r'J:/sst.intep.nc'
da1 = xr.open_dataset(sst_path).sortby('lat')
da2 = xr.open_dataset(olr_path).sortby('lat')
sst = da1.sst.sel(lat=slice(-30,30),lon=slice(100,200))
olr = da2.olr.sel(lat=slice(-30,30),lon=slice(100,200),
                  time=slice('2010','2010'))
############### calculate  ################################################
trend = np.zeros((sst.lat.shape[0],sst.lon.shape[0]))
p_value = np.zeros((sst.lat.shape[0],sst.lon.shape[0]))
for i in range (0,sst.lat.shape[0]):
    for j in range (0,sst.lon.shape[0]):
        trend[i,j], intercept, r_value, p_value[i,j], std_err=stats.linregress(np.arange(1,366),sst[:,i,j])
##############################################################################
################ plot #######################################################
lon = sst.lon.data
lat = sst.lat.data
##############################################################################
box = [100,200,-20,20]
xstep,ystep = 20,10
proj = ccrs.PlateCarree(central_longitude=180)
plt.rcParams['font.family'] = 'Times New Roman',
##############################################################################
fig = plt.figure(figsize=(8,7),dpi=200)
fig.tight_layout()
ax = fig.add_axes([0.1,0.2,0.8,0.7],projection = proj)
ax.set_extent(box,crs=ccrs.PlateCarree())
ax.coastlines('50m')
ax.set_xticks(np.arange(box[0],box[1]+xstep, xstep),crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(box[2], box[3]+1, ystep),crs=ccrs.PlateCarree())
lon_formatter = LongitudeFormatter(zero_direction_label=False)#True/False
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)
ax.spines[['right','left','top','bottom']].set_linewidth(1.1) 
ax.spines[['right','left','top','bottom']].set_visible(True) 
ax.set_xlabel('Lon',fontsize=14)
ax.set_title('Significance Test',fontsize=16,pad=8,loc='right')
ax.set_title('this is title',fontsize=16,pad=8,loc='left')
ax.tick_params(    which='both',direction='in',
               width=0.7,
                    pad=5, 
                    labelsize=14,
                    bottom=True, left=True, right=True, top=True)
c = ax.contourf(lon,lat,trend,
                # levels=np.linspace(-0.008,0.008,17),
                # levels=np.linspace(-0.32,0.32,17),
                #levels=np.linspace(-0.012,0.012,17),
        extend = 'both', 
        transform=ccrs.PlateCarree(),
         cmap=cmaps.BlueWhiteOrangeRed)
c1b = ax.contourf(lon,lat, p_value,
          [np.nanmin(p_value),0.05,np.nanmax(p_value)],
                      hatches=['.', None],
                      colors="none", 
                      transform=ccrs.PlateCarree())
cb=plt.colorbar(c,
                shrink=0.85,
                pad=0.15,
                orientation='horizontal',
                aspect=25,
                )
cb.ax.tick_params(labelsize=10,which='both',direction='in',)
plt.show()
#  save picture
# fig.savefig(r'D:\SST_OLR.png',format='png',dpi=500)
##############################################################################
# xtick = np.arange(100, 200, 20)
# ytick = np.arange(-30,31, 10)
# gl=ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,
#                 xlocs=[120,140,160,180,],
#                 ylocs=[-30,-20,-10,0,10,20,30,],
#                 x_inline=False, 
#                 y_inline=False,
#                 linewidth=1.5, color='gray', alpha=0.5, linestyle='--',
#                   )
# gl.xlabels_top = False
# gl.ylabels_right = False
# gl.xlines = True
# plt.xlabel('Lon',fontsize=15)
# plt.ylabel('Lat',fontsize=15)
# gl.xformatter = LONGITUDE_FORMATTER
# gl.yformatter = LATITUDE_FORMATTER


相关文章
|
2月前
|
Python
SciPy 教程 之 Scipy 显著性检验 9
SciPy 教程之 Scipy 显著性检验第9部分,介绍了显著性检验的基本概念、作用及原理,通过样本信息判断假设是否成立。着重讲解了使用scipy.stats模块进行显著性检验的方法,包括正态性检验中的偏度和峰度计算,以及如何利用normaltest()函数评估数据是否符合正态分布。示例代码展示了如何计算一组随机数的偏度和峰度。
34 1
|
2月前
|
BI Python
SciPy 教程 之 Scipy 显著性检验 8
本教程介绍SciPy中显著性检验的应用,包括如何利用scipy.stats模块进行显著性检验,以判断样本与总体假设间的差异是否显著。通过示例代码展示了如何使用describe()函数获取数组的统计描述信息,如观测次数、最小最大值、均值、方差等。
34 1
|
2月前
|
Python
SciPy 教程 之 Scipy 显著性检验 7
SciPy 教程之 Scipy 显著性检验第7部分,介绍显著性检验的基本概念及其在 SciPy 中的应用。显著性检验用于评估样本数据与假设之间的差异是否由随机因素引起。SciPy 的 `scipy.stats` 模块提供了执行显著性检验的功能,包括 KS 检验等方法,用于检测数据是否符合特定分布。示例代码展示了如何使用 KS 检验验证一组数据是否符合正态分布。
30 2
|
2月前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
43 1
|
2月前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
45 1
|
2月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
38 1
|
2月前
|
Python
SciPy 教程 之 Scipy 显著性检验 1
本教程介绍Scipy显著性检验,包括统计假设、零假设和备择假设等概念,以及如何使用scipy.stats模块进行显著性检验,以判断样本与总体假设间是否存在显著差异。
37 0
|
2月前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
39 0
|
3月前
|
存储 自然语言处理 Python
解密 Python 的作用域和名字空间
解密 Python 的作用域和名字空间
32 1
|
3月前
|
存储 索引 Python
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
66 0
下一篇
开通oss服务