爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9842|回复: 12

[作图] 求助关于滞后相关作图问题

[复制链接]

新浪微博达人勋

发表于 2022-4-22 20:41:22 | 显示全部楼层 |阅读模式
8金钱
打算画下面那样图,现在有数组两个a(37,12),b(37,12),都是37年,12个月的数据,算a与b的滞后相关系数,是要用esccr函数吗?mxlag要取多少呢,如果想画下下面一样的图那这个37年怎么处理呢,我不知道最后要得到一个怎样的数组画图,可以提供下思路吗?


相关.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-4-22 23:12:06 | 显示全部楼层
本帖最后由 一大碗年糕 于 2022-4-22 23:23 编辑

如果数组是二维的37年和12个月的应该先reshape或者ndtooned转换成一维逐月的数据再做相关把,但是这个图纵坐标是月份应该是直接分别对各个月单独的37年序列做超前滞后相关?(超前滞后就是和不同月做相关),用esccr的话先把交换维度(12,37),37放到最右边,mxlag取0,返回的(12,12)了,其实直接两个指数取不同月份直接就是代表超前滞后了,纯属个人想法哈哈
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-23 10:33:50 | 显示全部楼层
一大碗年糕 发表于 2022-4-22 23:12
如果数组是二维的37年和12个月的应该先reshape或者ndtooned转换成一维逐月的数据再做相关把,但是这个图纵 ...

可是如果把维交换了后,mxlag取0得到数组是(12,1),而且这样mxlag取几不就是代表滞后几年吗,大佬我还是不太懂如果用一维算这个数组时间应该截多少,mxlag取几,而且最后画图时纵坐标那个月份怎么体现呢,要画这样的图不是该用二维数组吗
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-4-23 10:52:27 | 显示全部楼层
aa... 发表于 2022-4-23 10:33
可是如果把维交换了后,mxlag取0得到数组是(12,1),而且这样mxlag取几不就是代表滞后几年吗,大佬我还 ...

我感觉一维应该是做不出纵轴的那个,两个一维做相关肯定是lag-r的图,应该也是单独取月份做的两维数组的相关(12,37),(12,37),这样返回的数组不应该是(12,12,mxlag)?
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-23 11:23:56 | 显示全部楼层
一大碗年糕 发表于 2022-4-23 10:52
我感觉一维应该是做不出纵轴的那个,两个一维做相关肯定是lag-r的图,应该也是单独取月份做的两维数组的 ...

大佬这样的话调用esccr函数该怎么写呢,为了论文临时学的ncl,实在是有好多不会的
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-4-23 11:27:44 | 显示全部楼层
aa... 发表于 2022-4-23 11:23
大佬这样的话调用esccr函数该怎么写呢,为了论文临时学的ncl,实在是有好多不会的

esccr((12,37),(12,37),0)这样return的是12,12把
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-23 11:40:50 | 显示全部楼层
一大碗年糕 发表于 2022-4-23 11:27
esccr((12,37),(12,37),0)这样return的是12,12把

他返回的是(12,1),脚本如下,大佬能帮忙看看吗,感谢

begin
f1= addfile("/cygdrive/d/lunwen/O3_1980_2016_merra2_instM_3d_asm_Np.nc4","r")
o3  = f1->O3(:,:,:,:)
o31 = dim_avg_n_Wrap(o3(:,{100:150},:,:), 1)
o31 = o31*1.0e+6
dim = dimsizes(o31)
ny  = dim(0)/12
var = onedtond(ndtooned(o31), (/ny,12,dim(1),dim(2)/))
  copy_VarCoords(o31(0,:,:), var(0,0,:,:))
o3m= dtrend_leftdim(var, False)
f= addfile("/cygdrive/d/lunwen/sst.mnmean.v5.nc","r")
    yyyymm = cd_calendar( f->time, -1)
    ymstrt  = 198001     
    ymlast  = 201612
    istrt = ind(yyyymm.eq.ymstrt)
    ilast = ind(yyyymm.eq.ymlast)
    temp  = f->sst
    sst = temp(istrt:ilast,{:},{:})
dim2= dimsizes(sst)
ny1= dim2(0)/12
sst1= onedtond(ndtooned(sst), (/ny1,12,dim2(1),dim2(2)/))
copy_VarCoords(sst(0,:,:), sst1(0,0,:,:))
sst2=sst1(:,:,{0:60},{100:280})
sstnew= dtrend_leftdim(sst2, False)
sst3=dim_avg_n_Wrap(sst2(:,:,{30:40},{150:180}),(/2,3/))
o2=dim_avg_n_Wrap(o3m(:,:,{65:90},{-180:180}),(/2,3/))

sst3!0="time"
sst3!1="month"
o2!0="time"
o2!1="month"
sst4=sst3(month|:,time|:)
o4=o2(month|:,time|:)
ccr=esccr(o4,sst4,0)

printVarSummary(ccr)
这是输出结果
Variable: ccr
Type: float
Total Size: 48 bytes
            12 values
Number of Dimensions: 2
Dimensions and sizes:   [12] x [1]
Coordinates:
Number Of Attributes: 1
  _FillValue :  1e+15
fatal:ScalarFieldInitialize: Insufficient number of elements in sfDataArray
fatal:Unable to initialize layer-Can't Create
fatal:Unable to access object with id:-4
fatal:Unable to access object with id:-4
warning:Unable to add DataItem "(null)" to DataList "cnScalarFieldData"
fatal:CompileDataList:DataList has no valid members


密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-4-23 11:54:45 | 显示全部楼层
aa... 发表于 2022-4-23 11:40
他返回的是(12,1),脚本如下,大佬能帮忙看看吗,感谢

begin

照理说应该不会吧,可能是esccr把你的两个数据的12的单位当成一样了,实际上用esccr做出那个图的话,AO那个的12是代表月份,nino的12是代表lag,命名sst的时候把12的month统一改成lag看看
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-4-23 13:41:39 | 显示全部楼层
一大碗年糕 发表于 2022-4-23 11:54
照理说应该不会吧,可能是esccr把你的两个数据的12的单位当成一样了,实际上用esccr做出那个图的话,AO那 ...

是这样吗?改了还是不行输出的ccr还是(12,1),有不用esccr的方法吗
sst3!0="time"
sst3!1="lag"
o2!0="time"
o2!1="month"
sst4=sst3(lag|:,time|:)
o4=o2(month|:,time|:)
ccr=esccr(o4,sst4,0)
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-4-23 13:59:39 来自手机 | 显示全部楼层
aa... 发表于 2022-04-23 13:41
是这样吗?改了还是不行输出的ccr还是(12,1),有不用esccr的方法吗
sst3!0="time"
sst3!1="lag"
o2!0="time"
o2!1="month"
sst4=sst3(lag|:,time|:)
o4=o2(month|:,time|:)
ccr=esccr(o4,sst4,0)

那就直接用相关的函数吧,就是AO的12个月,分别和nino的12个月做相关吧,AO1月和和nino 1到12月做一次输出12个,以此类推最后合并就是12×12了
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表