Python气象数据处理与绘图:相关性分析之散点图

您所在的位置:网站首页 python画相关系数图 Python气象数据处理与绘图:相关性分析之散点图

Python气象数据处理与绘图:相关性分析之散点图

2023-07-25 12:15| 来源: 网络整理| 查看: 265

1、前言

应粉丝要求更新一篇散点图相关分析的文章,这个图是否叫这个名字我也不太确定,考虑到这种图的画法大部分是使用散点的形式进行展示,那本文叫相关分析图吧。

很多文章中会提到2个变量之间有什么潜在联系的时候经常用的一张图就是散点图,比如说某地降水和温度之间是否存在联系,此时建立笛卡尔坐标系,横轴纵轴分别为降水和温度在同一位置随时间变化的量,这个时候在图中如果能看出来两者存在一些线性关系或者非线性的话,这个图就有价值了。说了这么多,我找几张图给大家看一下。

--降水和温度与动力之间的关系--

该图来自论文:Chen Z, Zhou T, Zhang L, et al. Global land monsoon precipitation changes in CMIP6 projections[J]. Geophysical Research Letters, 2020, 47(14): e2019GL086902.

图中还可以叠加相关系数的显著性检验,如果有多条模式或者不同时段进行对比的话可以在图中设置不同颜色的字体,比如上图使用的是不同时段的SSPs路径下CMIP6 MME结果来进行对比,目前学术上认为2021-2040为近期,2041-2060为中期,2080-2100为长期。这样的目的是为了看在未来不同时段下,CMIP6模式的结果是否呈现不同的特征,可以有一个横向的对比。

废话不多说了,开始吧~

2、读取数据

第一步,读入数据,代码如下:

data=xarray.open_dataset('/mnt/d/science/large_ensemble/picture/Fig15.tas_gardient_sfc/scatter_tas_sfcwind_add_members.nc') tas_gradient_NH=data.tas_gradient_nh.values tas_gradient_SH=data.tas_gradient_sh.values sfc_NH= (data.sfc_nh.values) sfc_SH= (data.sfc_sh.values) #NH 的梯度需要反转 sfc_NH_full= (data.sfc_nh_full.values) sfc_SH_full= (data.sfc_sh_full.values) #NH 的梯度需要反转 tas_gradient_NH_full= (data.tas_gradient_nh_full[:,1995-1950:].values) tas_gradient_SH_full= (data.tas_gradient_sh_full[:,1995-1950:].values)

这一步的话,不用太深究每个数据是什么意思。我在本篇文章中使用的数据是南北半球某区域的变量A和温度梯度在1950年到1995年的时间序列。也就是说A和温度对应的长度都是46,必须保证长度一致才能画图。这里可以这么理解: 平时时间序列图大家都画过了,x是Time,y是画的变量。这时候x和y的长度一致才能画图,散点图的话就是把x改为另一个长度相同的变量而已。

3、封装画图函数

封装函数是程序走向简洁性、易用性的重大一步,同时也是批量出图的一个关键点。后期会专门开一篇讲一下封装函数的一些注意点。

首先我们定义一个函数用来绘制图中的拟合一元线性方程:

def f(x,intercept,trend):# 计算出拟合方程 y=trend*x+intercept return y

然后我们定义散点图的函数:

函数的步骤分别是计算散点图的线性趋势,通过linregress函数返回的数据计算拟合方程。然后通过personr函数计算出相关系数和进行显著性检验。最后把显著性检验的结果放到legend上面进行展示。

def draw_scatter(ax,x,y,label,color,linecolor,loc,bbox_to_anchor,): trend=np.zeros(2) intercept=np.zeros(2) p_value=np.zeros(2) trend[0], intercept[0], rsq1, p_value[0], std_err=stats.linregress(x,y) print("each 0.5 ℃ change of LTG over could cause a XX±XX m s-1=",0.5*trend[0],'sterr=',std_err) # 绘出图像 CC=pearsonr(x, y) p=[] #if CC[1]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3