- 积分
- 2358
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-3-27
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2018-1-29 09:48:41
|
显示全部楼层
为啥我没设置要贡献还是需要。。。
脚本如下:
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/run_cor.ncl"
latS_U = -20
latN_U = 20
lonL_U = 40
lonR_U = 120
; latS_P = -20
; latN_P = 20
; lonL_P = 40
; lonR_P = 120
yrStrt = 1974
yrLast = 2016
season = "JJA"
years = ispan(yrStrt,yrLast,1)
nyears = dimsizes(years)
print(nyears)
;================================================
;Variables List:
; var1--------------sst
; var2--------------olr
;================================================
;initial data
sst_in = addfile("/Users/zhangguangli/Desktop/work/data/sst/HadISST_sst.nc", "r")
time_sst = sst_in->time
XXXX = cd_calendar(time_sst,-1 )
t_index_start1 = ind(XXXX.eq.197401)
t_index_end1 = ind(XXXX.eq.201612)
sst = sst_in->sst(t_index_start1:t_index_end1,:,:)
sst_sm = month_to_season(sst, "JJA")
sst_summer = dim_standardize_n(sst_sm, 0, 0)
copy_VarCoords(sst_sm, sst_summer)
printVarSummary(sst)
delete(sst)
sst = dim_standardize_n(sst_summer, 0, 0)
copy_VarCoords(sst_summer, sst)
olr_in = addfile("/Users/zhangguangli/Desktop/work/data/olr.mon.mean_197406_201701.nc", "r")
olr1 = olr_in->olr
olr = short2flt(olr1)
printVarSummary(olr)
olr_0 = dim_avg_n_Wrap(olr(0:2,:,:), 0)
printVarSummary(olr_0)
time_olr = olr_in->time
XXXX1 = cd_calendar(time_olr,-1 )
t_index_start11 = ind(XXXX1.eq.197501)
t_index_end11 = ind(XXXX1.eq.201612)
olr_2 = olr_in->olr(t_index_start11:t_index_end11,:,:)
olr_22= short2flt(olr_2)
printVarSummary(olr_22)
olr_2_sm = month_to_season(olr_22, "JJA")
printVarSummary(olr_2_sm)
olr_sm = new((/43,73,144/),float)
olr_sm(0,:,:) = olr_0(:,:)
olr_sm(1:3,:,:) = olr_2_sm(0:2,:,:)
olr_sm(4,:,:) = dim_avg_n_Wrap(olr_2_sm, 0)
olr_sm(5:42,:,:) = olr_2_sm(4:41,:,:)
copy_VarCoords(olr_0,olr_sm(0,:,:))
olr_sm!0 = "time"
printVarSummary(olr_sm)
delete(olr)
olr = dim_standardize_n(olr_sm, 0, 0)
copy_VarCoords(olr_sm, olr)
printVarSummary(sst)
printVarSummary(olr)
nmca = 2 ; how many MCA we need
var1_region = sst(:,{latS_U:latN_U},{lonL_U:lonR_U});把sst数据reshape成二维
var1_size = dimsizes(var1_region)
n_var1_size = var1_size(1)*var1_size(2)
homlft = new((/nmca,n_var1_size/),float)
hetlft = new((/nmca,n_var1_size/),float)
var1_ano_line = reshape(var1_region,(/var1_size(0),n_var1_size/))
var1_ano_line!0 = "time"
var1_ano_line!1 = "pts"
printVarSummary(var1_ano_line)
printMinMax(var1_ano_line, False)
var2_region = olr(:,{latS_U:latN_U},{lonL_U:lonR_U});把olr数据reshape成二维
var2_size = dimsizes(var2_region)
n_var2_size = var2_size(1)*var2_size(2)
homrgt = new((/nmca,n_var2_size/),float)
hetrgt = new((/nmca,n_var2_size/),float)
var2_ano_line = reshape(var2_region,(/var2_size(0),n_var2_size/))
var2_ano_line!0 = "time"
var2_ano_line!1 = "pts"
printVarSummary(var2_ano_line)
printMinMax(var2_ano_line, False)
ntime = nyears ; # time steps
ncols = n_var1_size ; # columns (stations or grid pts) for S
ncolz = var2_size ; # columns (stations or grid pts) for Z
nsvd = 2 ; # svd patterns to calculate
; [nsvd <= min(ncols, ncolz) ]
; xmsg = -999.9 ; missing value
x = svdcov(var1_ano_line(pts|:,time|:),var2_ano_line(pts|:,time|:),nsvd,homlft,hetlft,homrgt,hetrgt)
print("svdcov: percent variance= " + x)
printVarSummary(x)
ak = onedtond(x@ak,(/nsvd,ntime/))
bk = onedtond(x@bk,(/nsvd,ntime/))
ak!0 = "sv"
ak!1 = "time"
bk!0 = "sv"
bk!1 = "time"
ccr = escorc(ak(0,:), bk(0,:))
print(ccr)
print(ak)
print(bk)
ak_std = dim_standardize_Wrap(ak,1)
bk_std = dim_standardize_Wrap(bk,1)
printVarSummary(ak_std)
printVarSummary(bk_std)
data = new((/2,nyears/),"float")
data(0,:) = ak_std(0,:)
data(1,:) = bk_std(0,:)
ccr_ak = escorc_n(ak(0,:), olr, 0, 0)*-1
copy_VarCoords(olr(0,:,:), ccr_ak)
printVarSummary(ccr_ak)
ccr_bk = escorc_n(bk(0,:), sst, 0, 0)*-1
copy_VarCoords(sst(0,:,:), ccr_bk)
printVarSummary(ccr_bk)
test_ak = rtest(ccr_ak, nyears, 0)
; test_ak = where(ccr_ak.eq.ccr_ak@_FillValue, test_ak@_FillValue, test_ak)
copy_VarCoords(ccr_ak, test_ak)
; test_bk = new((/180,360/),float)
; test_bk = sqrt(nyears-2)*ccr_bk/sqrt(1-ccr_bk*ccr_bk)
; test_bk=(/student_t(test_bk, nyears-2/)
test_bk = rtest(ccr_bk, nyears, 0)
test_bk = where(ccr_bk.eq.ccr_bk@_FillValue, test_bk@_FillValue, test_bk)
copy_VarCoords(ccr_bk, test_bk)
test_bk_reverse = 1 - test_bk
copy_VarCoords(test_bk, test_bk_reverse)
printVarSummary(test_ak)
printMinMax(test_ak, False)
printVarSummary(test_bk)
printMinMax(test_bk, False)
; ==============================================================
; Set the figure parameters
; ==============================================================
wks = gsn_open_wks("png","olr&sst_kongjian")
plot = new(2,"graphic") ;shading
plot_prob = new(2,"graphic") ;shading
gsn_define_colormap(wks,"BlueWhiteOrangeRed")
res = True
;res@cnFillDrawOrder = "PreDraw"
res@gsnDraw = False
res@gsnFrame = False ;don't advance frame
res@gsnAddCyclic = False ;EOF data is not cyclic
res@cnFillOn = True ; turn on color fill
res@cnLinesOn = False
res@cnLineLabelsOn = False ;turn off cn line labels
res@cnInfoLabelOn = False ;turn off contour information label
res@mpFillOn = True ; turn off map fill
res@mpMinLatF = latS_U
res@mpMaxLatF = latN_U
res@mpMinLonF = lonL_U
res@mpMaxLonF = lonR_U
res@mpCenterLonF = (lonL_U+lonR_U)/2
res@lbLabelBarOn = False
; res@lbOrientation = "Vertical"
res@pmLabelBarHeightF = 0.08
res@pmLabelBarWidthF = 0.55
res@lbLabelFontHeightF = 0.018
res@pmLabelBarOrthogonalPosF = 0.14
res@tmXBLabelFontHeightF = 0.022 ;font height of tick labels
res@tmYLLabelFontHeightF = 0.022
res@tmXBTickSpacingF = 10. ;label spacing
res@tmYLTickSpacingF = 10. ;label spacing
res@gsnLeftStringFontHeightF = 0.022
res@gsnRightStringFontHeightF = 0.022
res@gsnLeftString = "(a)SST"
res@gsnRightString = season
res@cnLevelSelectionMode = "ManualLevels"
res@cnMinLevelValF = -1
res@cnMaxLevelValF = 1
res@cnLevelSpacingF = 0.1
plot(0) = gsn_csm_contour_map(wks,ccr_bk,res)
res@tmYLTickSpacingF = 10.
res@tmXBTickSpacingF = 10. ;label spacing
res@pmLabelBarOrthogonalPosF = 0.25
res@mpMinLatF = latS_U
res@mpMaxLatF = latN_U
res@mpMinLonF = lonL_U
res@mpMaxLonF = lonR_U
res@mpCenterLonF = (lonL_U+lonR_U)/2
res@gsnLeftString = "(b)OLR"
res@cnLevelSelectionMode = "ManualLevels"
res@cnMinLevelValF = -1
res@cnMaxLevelValF = 1
res@cnLevelSpacingF = 0.1
plot(1) = gsn_csm_contour_map(wks,ccr_ak,res) ; create a default plot
res2 = True
res2@gsnDraw = False
res2@gsnFrame = False
res2@gsnDraw = False
res2@gsnFrame = False ;don't advance frame
res2@gsnAddCyclic = False ;EOF data is not cyclic
res2@cnFillOn = True ; turn on color fill
res2@cnLinesOn = False
res2@cnLineLabelsOn = False ;turn off cn line labels
res2@cnInfoLabelOn = False ;turn off contour information label
res2@cnFillOn = True
res2@cnLinesOn = False
res2@cnLineLabelsOn = False
res2@cnInfoLabelOn = False
res2@lbLabelBarOn = False
res2@cnMonoFillPattern = False
res2@cnLevelSelectionMode = "ExplicitLevels"
res2@cnLevels = (/0.1/) ;; set to significance level
res2@cnFillPatterns = (/17,-1/)
res2@cnFillColors = (/1,0/)
res2@cnFillDotSizeF = 0.003
res2@gsnLeftString = ""
res2@gsnAddCyclic = True
plot_prob(0) = gsn_csm_contour(wks, test_bk, res2)
; res2@cnLevelSelectionMode = "ExplicitLevels"
; res2@cnLevels = (/0.05/) ;; set to significance level
; res2@cnFillPatterns = (/-1,17/)
; res2@cnFillColors = (/1,0/)
plot_prob(1) = gsn_csm_contour(wks, test_ak, res2)
do i = 0, 1
overlay(plot(i), plot_prob(i))
end do
;************************************************
; panel plot only resources
;************************************************
resP = True
resP@gsnPanelLabelBar = True
; resP@lbOrientation = "Vertical"
resP@gsnPanelMainString = "JJA IO SST&OLR SVD"
gsn_panel(wks,plot,(/2,1/),resP) ; now draw as one plot
;************************************************
wks_ts = gsn_open_wks("png","olr&sst_shijian")
rts = True
rts@gsnDraw = False ; don't draw yet
rts@gsnFrame = False ; don't advance frame yet
rts@vpXF = 0.15
rts@vpWidthF = 0.8
rts@vpHeightF= 0.35
rts@tiYAxisString = "Standardized" ; y-axis label
; rts@tiYAxisString = " " ; y-axis label
rts@tmXBLabelFontHeightF = 0.02 ;font height of tick labels
rts@tmYLLabelFontHeightF = 0.02
rts@gsnLeftStringFontHeightF = 0.02
rts@gsnRightStringFontHeightF = 0.02
rts@gsnYRefLine = 0. ; reference line
rts@xyLineColors = (/"blue","red"/) ; colors chosen
rts@xyLineThicknesses = (/3.0,3.0/) ; line thicknesses
rts@xyDashPatterns = (/0.,0./) ; make all lines solid
rts@trXMinF = yrStrt ; leave a margin for legend
rts@trXMaxF = yrLast
;rts@tmXBMode = "Manual" ; Define own tick mark labels.
rts@tmXBTickSpacingF = 5
rts@trYMinF = -3.0 ; min value on x-axis
rts@trYMaxF = 3.0 ; max value on x-axis
rts@gsnLeftString = "Time Series of SVD1 (R = "+sprintf("%5.2f",ccr)+")"
rts@gsnRightString = sprintf("%5.2f",x(0))+"%"
plot_ts = gsn_csm_xy(wks_ts,years,data*-1,rts)
;---------------------------Add plot legend-----------------------------------
res_lines = True ; polyline mods desired
res_lines@gsLineDashPattern = 0. ; solid line
res_lines@gsLineThicknessF = 3. ; line thicker
res_text = True ; text mods desired
res_text@txFontHeightF = 0.015 ; change text size
res_text@txJust = "CenterLeft" ; text justification
res_lines@gsLineColor = "blue"
yy = (/2.5,2.5/)
xx = (/2007,2010/)
text_pos = 2011
dum11 = gsn_add_polyline(wks_ts,plot_ts,xx,yy,res_lines) ; add polyline
dum12 = gsn_add_text(wks_ts,plot_ts,"SST",text_pos,yy(0),res_text); add text
res_lines@gsLineColor = "red"
yy = yy - 0.6
dum21 = gsn_add_polyline(wks_ts,plot_ts,xx,yy,res_lines) ; add polyline
dum22 = gsn_add_text(wks_ts,plot_ts,"OLR",text_pos,yy(0),res_text); add text
draw(plot_ts)
frame(wks)
frame(wks_ts)
|
|