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


相关文章
|
3天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
10 1
|
6天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
13 1
|
9天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
18 1
|
4天前
|
Python
SciPy 教程 之 Scipy 显著性检验 1
本教程介绍Scipy显著性检验,包括统计假设、零假设和备择假设等概念,以及如何使用scipy.stats模块进行显著性检验,以判断样本与总体假设间是否存在显著差异。
8 0
|
9天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
18 0
|
1月前
|
存储 自然语言处理 Python
解密 Python 的作用域和名字空间
解密 Python 的作用域和名字空间
15 1
|
1月前
|
存储 索引 Python
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
深度解密函数的 local 名字空间(当 Python 中混进一只薛定谔的猫……)
39 0
|
3月前
|
自然语言处理 算法 数据挖掘
基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp
本文介绍了一个基于Python的情感分析和聚类分析项目,使用snownlp库对豆瓣电影评论进行情感分析,并采用手肘法辅助K-means算法进行聚类分析,以探索评论中的不同主题和情感集群。
基于python豆瓣电影评论的情感分析和聚类分析,聚类分析有手肘法进行检验,情感分析用snownlp
|
3月前
|
数据采集 数据可视化 数据挖掘
【python】python葡萄酒国家分布情况数据分析pyecharts可视化(源码+数据集+论文)【独一无二】
【python】python葡萄酒国家分布情况数据分析pyecharts可视化(源码+数据集+论文)【独一无二】
|
3月前
|
数据挖掘 Python
【Python数据分析】假设检验的基本思想、原理和步骤
文章详细介绍了假设检验的基本思想、原理、可能犯的错误类型、基本步骤以及在不同总体情况下的检验方法,阐述了如何在Python中应用假设检验,并通过P值来判断假设的可靠性。
50 1