爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 464|回复: 3

[作图] ncl绘制台风路径左右维度不一致怎么办?求大神

[复制链接]

新浪微博达人勋

发表于 2024-5-28 21:05:58 | 显示全部楼层 |阅读模式

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

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

x
ncl程序:
;********************************************************
; Plot storm stracks from wrfout files.
;********************************************************

;********************************************************

;

; JUN-18-2005

; So-Young Ha (MMM/NCAR)

; SEP-01-2006

; Slightly modified by Mary Haley to add some extra comments.

; ===========================================



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/wrf/WRF_contributed.ncl"

load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"





begin



; DATES

  date = (/1906,1912,1918,2000,2006,2012,2018,2100,2106,2112,2118,2200,2206,2212,2218,2300,2306,2312,2318,2400,2406/)

  ndate = dimsizes(date)



  sdate = sprinti("%4.0i",date)



; Experiment name (for legend)

  EXP = (/"EXP_I"/)                ; (/"EXP_I","EXP_II","EXP_III"/)

  nexp = dimsizes(EXP)



; To get lat/lon info.



  a = addfile("/work/home/liujun/software/WRF-4.5/run/wrfout_d01_2013-06-19_06:00:00.nc","r")



  lat2d = a->XLAT(0,:,:)

  lon2d = a->XLONG(0,:,:)

  dimll = dimsizes(lat2d)

  nlat  = dimll(0)

  mlon  = dimll(1)



; Sea Level Pressure

  slp = wrf_user_getvar(a,"slp",0)

  dims = dimsizes(slp)



; Array for track

  time = new(ndate,string)

  imin = new(ndate,integer)

  jmin = new(ndate,integer)

  smin = new(ndate,integer)



; =======

;  ndate

; =======

   fs = systemfunc("ls /work/home/liujun/software/WRF-4.5/run/wrfout*00")

  nfs= dimsizes(fs)

  if(nfs .ne. ndate) then

     print("Check input data:"+nfs+" .ne. "+ndate)

  end if



  do ifs=0,nfs-1

    f = addfile(fs(ifs)+".nc","r")

    time(ifs) = wrf_user_list_times(f)

;    print(time(ifs))

    slp2d = wrf_user_getvar(f,"slp",0)



; We need to convert 2-D array to 1-D array to find the minima.

    slp1d     = ndtooned(slp2d)

    smin(ifs) = minind(slp1d)



; Convert the index for 1-D array back to the indeces for 2-D array.

    minij     = ind_resolve(ind(slp1d.eq.min(slp2d)),dims)

    imin(ifs) = minij(0,0)

    jmin(ifs) = minij(0,1)



;    print(time(ifs)+" : "+min(slp2d)+" ("+imin(ifs)+","+jmin(ifs)+")")

  end do

;



; Graphics section



  wks=gsn_open_wks("ps","track")              ; Open PS file.

  gsn_define_colormap(wks,"BlGrYeOrReVi200")  ; Change color map.



  res                     = True

  res@gsnDraw             = False             ; Turn off draw.

  res@gsnFrame            = False             ; Turn off frame advance.

  res@gsnMaximize         = True              ; Maximize plot in frame.



  res@tiMainString = "Hurricane Isabel"       ; Main title



  WRF_map_c(a,res,0)                          ; Set up map resources

                                              ;    (plot options)

  plot = gsn_csm_map(wks,res)                 ; Create a map.



; Set up resources for polymarkers.

  gsres                = True

  gsres@gsMarkerIndex  = 16                  ; filled dot

  ;gsres@gsMarkerSizeF = 0.005               ; default - 0.007

  cols                  = (/5,160,40/)



; Set up resources for polylines.

  res_lines                      = True

  res_lines@gsLineThicknessF     = 3.           ; 3x as thick



  dot  = new(ndate,graphic)    ; Make sure each gsn_add_polyxxx call

  line = new(ndate,graphic)    ; is assigned to a unique variable.



; Loop through each date and add polylines to the plot.

  do i = 0,ndate-2

     res_lines@gsLineColor           = cols(0)

     xx=(/lon2d(imin(i),jmin(i)),lon2d(imin(i+1),jmin(i+1))/)

     yy=(/lat2d(imin(i),jmin(i)),lat2d(imin(i+1),jmin(i+1))/)

     line(i) = gsn_add_polyline(wks,plot,xx,yy,res_lines)

  end do



  lon1d = ndtooned(lon2d)

  lat1d = ndtooned(lat2d)



; Loop through each date and add polymarkers to the plot.

  do i = 0,ndate-1

     print("dot:"+lon1d(smin(i))+","+lat1d(smin(i)))

     gsres@gsMarkerColor  = cols(0)

     dot(i)=gsn_add_polymarker(wks,plot,lon1d(smin(i)),lat1d(smin(i)),gsres)

  end do



; Date (Legend)

  txres               = True

  txres@txFontHeightF = 0.015

  txres@txFontColor   = cols(0)



  txid1 = new(ndate,graphic)

; Loop through each date and draw a text string on the plot.

  do i = 0, ndate-1

     txres@txJust = "CenterRight"

     ix = smin(i) - 4

     print("Eye:"+ix)

     if(i.eq.1) then

        txres@txJust = "CenterLeft"

        ix = ix + 8

     end if

     txid1(i) = gsn_add_text(wks,plot,sdate(i),lon1d(ix),lat1d(ix),txres)

  end do



; Add marker and text for legend. (Or you can just use "pmLegend" instead.)

  txres@txJust = "CenterLeft"



  txid2 = new(nexp,graphic)

  pmid2 = new(nexp,graphic)

  do i = 0,nexp-1

     gsres@gsMarkerColor  = cols(i)

     txres@txFontColor    = cols(i)

     ii = ((/129,119,109/))  ; ilat

     jj = ((/110,110,110/))  ; jlon

     ji = ii*mlon+jj         ; col x row

     pmid2(i) = gsn_add_polymarker(wks,plot,lon1d(ji(i)),lat1d(ji(i)),gsres)

     txid2(i) = gsn_add_text(wks,plot,EXP(i),lon1d(ji(i)+5),lat1d(ji(i)),txres)

  end do



  draw(plot)

  frame(wks)

end

报错信息:
Variable: times
Type: string
Total Size: 8 bytes
            1 values
Number of Dimensions: 1
Dimensions and sizes:        [1]
Coordinates:
Number Of Attributes: 2
  description :        times in file
  _FillValue :        missing
(0)        2013-06-19_06:00:00


Variable: times
Type: string
Total Size: 8 bytes
            1 values
Number of Dimensions: 1
Dimensions and sizes:        [1]
Coordinates:
Number Of Attributes: 2
  description :        times in file
  _FillValue :        missing
(0)        2013-06-19_12:00:00


Variable: times
Type: string
Total Size: 8 bytes
            1 values
Number of Dimensions: 1
Dimensions and sizes:        [1]
Coordinates:
Number Of Attributes: 2
  description :        times in file
  _FillValue :        missing
(0)        2013-06-19_18:00:00


Variable: times
Type: string
Total Size: 8 bytes
            1 values
Number of Dimensions: 1
Dimensions and sizes:        [1]
Coordinates:
Number Of Attributes: 2
  description :        times in file
  _FillValue :        missing
(0)        2013-06-20_00:00:00
fatal:Number of dimensions on right hand side do not match number of dimension in left hand side

fatal:["Execute.c":8637]:Execute: Error occurred at or near line 139 in file 1.ncl

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

新浪微博达人勋

发表于 2024-5-29 21:57:14 | 显示全部楼层
左右两侧维度不一样,那就换一个变量名呗。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2024-5-30 10:09:29 | 显示全部楼层
易小凯 发表于 2024-5-29 21:57
左右两侧维度不一样,那就换一个变量名呗。

怎么修改啊,支个招呗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-6-4 19:24:52 | 显示全部楼层
赋值的时候用:=   不要用=
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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