爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 28163|回复: 21

[作图] 对海温做EOF分析并检验(逐月距平)

  [复制链接]

新浪微博达人勋

发表于 2018-12-20 19:48:06 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 HDdd 于 2018-12-20 19:50 编辑

分享一下气候统计作业
begin
    neof = 3
    latS = 0
    latN = -60
    lonL = 150
    lonR = 260
;*******************************************
;  Read data
;*******************************************
    path = "/cygdrive/F/ncl/qhtj/"
    fi = "sst.mon.mean.nc"
    f = addfile(path+fi,"r")
    YYYYMM = cd_calendar( f->time, -1)
    ymStrt = 198701     
    ymLast = 201612
    iStrt = ind(YYYYMM .eq. ymStrt)
    iLast = ind(YYYYMM .eq. ymLast)
    xx =f->sst(iStrt:iLast,{latS:latN},{lonL:lonR})
    ;x = month_to_season(xx, "JJA")
    ;year = ispan(1987,2016,1)
    xx_avg = clmMonTLL(xx);计算逐月平均值
    x = calcMonAnomTLL(xx, xx_avg);计算距平
;*******************************************
;  EOF
;*******************************************
  eof   = eofunc_n_Wrap( x, neof, False, 0)
  eof_ts = eofunc_ts_n_Wrap( x, eof, False, 0)
  ;yyyymm = cd_calendar(eof_ts&time, -1)
  yyyymm = ispan(1,360,1)

  printVarSummary(eof)
  printVarSummary(eof_ts)
  
;*******************************************
;  plots
;*******************************************
  output = "/cygdrive/F/ncl/eof_hd1"
  wks =gsn_open_wks("png",output)     ; send graphics to PNG file

  plot = new(neof,graphic)                ; create graphic array
                                          ;only needed if paneling
  res                      = True         
  res@gsnDraw              = False        ; don't draw yet
  res@gsnFrame             = False        ; don't advance frame yet
  res@gsnAddCyclic         = False        ; data not cyclic
  res@cnFillPalette        = "BlWhRe"   ; choose colormap
   res@mpCenterLonF        = 180.
   res@mpMinLatF           = min(x&lat)
   res@mpMaxLatF           = max(x&lat)
   res@mpMinLonF           = min(x&lon)
   res@mpMaxLonF           = max(x&lon)
   
  res@mpFillDrawOrder      = "PostDraw"
  res@mpGeophysicalLineColor ="white"
  res@cnFillOn             = True         ; turn on color fill
  res@cnLinesOn            = True         ; True is default
  res@lbLabelBarOn         = False        ; turn off individual lb's
  
  symMinMaxPlt(eof, 16, False, res);contributed.ncl

; panel plot onlyresources
  resP                     = True         ; modify the panel plot
  resP@gsnMaximize         = True         ; large format
  resP@gsnPanelLabelBar    = True         ; add common colorbar

  resP@gsnPanelMainString  = "EOF"
  do n=0,neof-1
     res@gsnLeftString  = "EOF "+(n+1)
     res@gsnRightString =sprintf("%5.1f", eof@pcvar(n)) +"%"
     plot(n) =gsn_csm_contour_map(wks,eof(n,:,:),res)
  end do
  gsn_panel(wks,plot,(/neof,1/),resP)     ; draw all 'neof' as one plot

;*******************************************
; time series (principalcomponent) plot
;*******************************************
  eof_ts@long_name = "Amplitude"

  rts          = True
  rts@gsnDraw  = False       ; don't draw yet
  rts@gsnFrame = False       ; don't advanceframe yet
;rts@gsnScale = True        ; force textscaling               

; these four resourcesallow the user to stretch the plot size, and
; decide exactly where onthe page to draw it.

  rts@vpHeightF = 0.40        ; Changes the aspect ratio
  rts@vpWidthF = 0.85
  rts@vpXF     = 0.10        ; change startlocations
  rts@vpYF     = 0.75        ; the plot

  rts@gsnYRefLine           = 0.              ; reference line   
  rts@gsnXYBarChart         = True
  rts@gsnAboveYRefLineColor ="red"           ; above refline fill red
  rts@gsnBelowYRefLineColor ="blue"          ; below refline fill blue

; panel plot onlyresources
  rtsP                     = True             ; modify the panel plot
  rtsP@gsnMaximize         = True             ; large format
      
  ;resP@gsnPanelMainString  = "SCRIPPS: Pierce"
  rts@tmXBMode = "Explicit"
  rts@tmXBValues = (/37,97,157,217,277,337/)
  ;rts@tmXBValues =(/199001,199501,200001,200501,201001,201501/)
  rts@tmXBLabels =(/199001,199501,200001,200501,201001,201501/)

  do n=0,neof-1
     rts@gsnLeftString  = "EOF "+(n+1)
     rts@gsnRightString =sprintf("%5.1f", eof@pcvar(n)) +"%"
     plot(n) = gsn_csm_xy(wks,yyyymm,eof_ts(n,:),rts)
  end do                                    
  gsn_panel(wks,plot,(/neof,1/),rtsP)        ; draw all 'neof' as one plot
end



eof_hd1.000002.png
eof_hd1.000001.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-3-20 22:18:58 | 显示全部楼层
多谢分享!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2019-4-7 19:16:57 | 显示全部楼层
本帖最后由 atten_x 于 2020-3-31 10:14 编辑

有作图需求的同学可以扣 2907781253~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-4-23 19:57:00 | 显示全部楼层
有作图需求的同学可以扣 2907781253~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-8-20 20:02:45 | 显示全部楼层
谢谢!帮大忙了!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-9-26 08:46:54 | 显示全部楼层
好东西码一下
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-2-11 23:54:57 | 显示全部楼层
好东西,学习一下!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 成长值: 0
发表于 2020-2-15 13:39:34 | 显示全部楼层
学习了,感谢分享
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-2-28 22:30:54 | 显示全部楼层
刚接触NCL 。。想问一下
    path = "/cygdrive/F/ncl/qhtj/"
    fi = "sst.mon.mean.nc"
    f = addfile(path+fi,"r")
    YYYYMM = cd_calendar( f->time, -1)
    ymStrt = 198701     
    ymLast = 201612
    iStrt = ind(YYYYMM .eq. ymStrt)
    iLast = ind(YYYYMM .eq. ymLast)
这几个步骤是什么意思...求大神指点一下
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-3-27 01:39:26 | 显示全部楼层
FengLiang 发表于 2020-2-28 22:30
刚接触NCL 。。想问一下
    path = "/cygdrive/F/ncl/qhtj/"
    fi = "sst.mon.mean.nc"

前三行是读取.nc格式的数据文件,数据的路径是path,文件名是fi里的sst.mon.mean.nc,第三行就是读取该数据文件,“r”表示读取,第四行是将时间格式转换为年月格式,比如197901,五六行设置需要处理数据的起始和结束时间,七八行返回起始和结束时间在数组中的下标。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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