爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 313|回复: 2

NCL绘制深时降雨量

[复制链接]

新浪微博达人勋

发表于 2025-2-22 16:30:44 | 显示全部楼层 |阅读模式
100金钱

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 "/work/home/zhengys/PROCESS/share/sub_function.ncl"
load "/work/home/zhengys/PROCESS/share/sub_plot_ele.ncl"
load "/work/home/zhengys/PROCESS/share/ncl_land_type.ncl"
;---------------------------------------------------------------------------

;---------------------------------------------------------------------------

begin

   grop     = "topo_180ma_"
;   dir0     = "../../"
   dir_figs = "/work/home/zhengys/PROCESS/share/preci/"
   dir_data = "/work/home/zhengys/PROCESS/share/preci/"

   case1s   =(/"180ma_a1","180ma_a2","180ma_a3","180ma_a4"/)
   case2s   =(/"180ma_a1","180ma_a2","180ma_a3","180ma_a4"/)
   topoE    = "/work/home/zhengys/PROCESS/share/topo/180ma_topo_2x2.nc"
   topoL    = "/work/home/zhengys/PROCESS/share/topo/180ma_topo_2x2.nc"
;   case1s   =(/"E560_a","L560_a","E560_b","L560_b","E560_c","L560_c"/)
;   case2s   =(/"E560_a","L560_a","E560_b","L560_b","E560_c","L560_c"/)
;   topoE    = "./process/paleooutline/34ma/34ma_t1_2.0d.nc"
;   topoL    = "./process/paleooutline/24ma/24ma_t2_2.0d.nc"      

   strA     = "("+(/"a","b","c","d"/)+") "
   strA1     = "("+(/"a","b","c","d"/)+") "
   strB     = conform(strA,(/""/),0)
   left     = strA + case2s
   cent     = strB

;   xf      := (/ 0.10,0.55, 0.10,0.55, 0.10,0.55 /)
;   yf      := (/ 0.95,0.95, 0.68,0.68, 0.41,0.41 /)

   fps      = dir_data + case1s + "_process.nc"
   fes      = dir_data + case1s + ".cam.ele.nc"
   fts      = (/topoE,topoL,topoE,topoL/)
   land0    = "/work/home/zhengys/PROCESS/share/no_continent_line"

   oft      = "eps"
   strC     = (/"ann","sum","win"/)
   ofnAs    = dir_figs +grop+ "pt_water_"+strC
   strD     = ispan(0,3,1)
   ofnBs    = dir_figs +grop+ "pt_water_sea_"+(/"djf","mam","jja","son"/)
   ofnAsd   = ofnAs + "_diff"
   ofnBsd   = ofnBs + "_diff"


;   lat_min  = 0.
;   lat_max  = 75.
;  lon_min  = -15.
;   lon_max  = 150.
;   lon_cet  = (lon_min+lon_max)/2.

   lat_min  = -90.
   lat_max  = 90.
   lon_min  = -180.
   lon_max  = 180.
   lon_cet  = (lon_min+lon_max)/2.

   ;---------------------------------------------------
   res                              = True
   res@gsnDraw                      = False   ;绘图时不绘制图形元素,通常用于先设置资源再进行绘图
   res@gsnFrame                     = False   ;不绘制图形的边框
   res@gsnLeftString                = ""     ;图形的左侧不显示任何字符串
   res@gsnLeftStringOrthogonalPosF  = 0.007       ;控制左侧字符串与图形边缘的垂直位置
   res@gsnCenterString              = ""        ;表示在图形的中心不显示任何字符串
   res@gsnCenterStringOrthogonalPosF= 0.01       ;控制中心字符串与图形边缘的垂直位置
   res@gsnRightString               = ""        ;表示在图形的右侧不显示任何字符串
   res@gsnRightStringOrthogonalPosF = 0.01    ;控制右侧字符串与图形边缘的垂直位置
   res@gsnAddCyclic                 = True   ;通常用于添加周期性边界条件,这在绘制全球地图时很有用
   res@tmYLMode = "Explicit"                      ;表示Y轴标签模式是显式指定的
   res@tmYLValues = (/-90,-45,0,45,90/)                 ;显式指定的Y轴标签位置
   res@tmYLLabels = (/"-90~S~o~N~S","-45~S~o~N~N","0~S~o~N~N","45~S~o~N~N","90~S~o~N~N"/)    ;显式指定的Y轴标签文本
   res@tmXBMode = "Explicit"                      ;表示X轴标签模式是显式指定的
   res@tmXBValues = (/-180,-90,0,90,180/)          ;显式指定的X轴标签位置
   res@tmXBLabels = (/"-180~S~o~N~W","-90~S~o~N~W","0~S~o","90~S~o~N~E","180~S~o~N~E"/)    ;显式指定的X轴标签文本
   res@tmBorderThicknessF = 0.05                  ;指定边框线的粗细
   res@gsnStringFontHeightF         = 0.015    ;指定字符串的字体高度
   res@tmXBLabelFontHeightF         = 0.010    ;指定X轴标签的字体高度
   res@tmYLLabelFontHeightF         = 0.010    ;指定Y轴标签的字体高度
   res@tmXBLabelDeltaF              = -0.5      ;指定X轴标签相对于其默认位置的水平偏移量
   res@tmYLLabelDeltaF              = -0.5      ;指定Y轴标签相对于其默认位置的垂直偏移量
   res@tmXTOn                       = False   ;表示不绘制X轴的标题
   res@tmYROn                       = False   ;表示不绘制Y轴的标题
   res@tiYAxisFontHeightF           = 0.          ;导致Y轴标题不可见


   resS                             = res
   resS@mpGridAndLimbOn             = True     ;设置地图资源,启用绘制经纬网格线和地图边缘
   resS@mpGridLatSpacingF           = 30.         ;设置纬度网格线的间隔为30度
   resS@mpGridLonSpacingF           = 90.         ;设置经度网格线的间隔为90度
   resS@mpMinLatF                   = lat_min   ;设置地图的最小纬度
   resS@mpMaxLatF                   = lat_max   ;设置地图的最大纬度
   resS@mpMinLonF                   = lon_min   ;设置地图的最小经度
   resS@mpMaxLonF                   = lon_max   ;设置地图的最大经度
   resS@mpCenterLonF                = (resS@mpMinLonF + resS@mpMaxLonF)/2.   ;计算地图中心经度,并设置为最小经度和最大经度的平均值
   resS@mpGridLineColor             = "Grey40" ;设置网格线的颜色为灰色
   resS@mpGridLineThicknessF        = 0.5         ;设置网格线的线宽为0.5
   resS@mpGridLineDashPattern       = 2           ;设置网格线为虚线样式,数字2代表特定的虚线模式
   resS@mpFillOn                    = False     ;禁用地图填充
   resS@mpGeophysicalLineThicknessF = 0.90       ;设置地理特征线条(如海岸线)的线宽为0.90
   resS@mpGeophysicalLineColor      = "black"        ;设置地理特征线条的颜色为黑色
   resS@mpDataBaseVersion           = "Ncarg4_1"  ;指定地图数据库的版本
   resS@mpDataSetName               = land0             ; land0    = "../../share/no_continent_line" ,通常是一个没有大陆轮廓线的地图数据集
;   resS@mpProjection                = "Robinson"   
   ;res@pmTickMarkDisplayMode  = "Always"
   resS@cnLinesOn                   = False     ;禁用颜色条上的线条
   resS@cnFillOn                    = True      ;启用颜色条的填充
;  resS@cnFillMode                  = "CellFill"   ;如果取消注释,将设置颜色条的填充模式
   resS@cnLineLabelsOn              = False        ;禁用颜色条上的线条标签
   resS@cnInfoLabelOn               = False        ;禁用颜色条上的信息标签
   resS@cnLevelSelectionMode        = "ExplicitLevels"   ;设置颜色条的级别选择模式为显式级别
   resS@lbLabelBarOn                = False     ;禁用标签栏


   resL                             = res
   resL@cnLinesOn                   = True      ;启用等值线的绘制
   resL@cnFillOn                    = False     ;禁用等值线的填充
   resL@cnLineLabelsOn              = False        ;禁用等值线上的标签
   resL@cnLineThicknessF            = 3.0         ;设置等值线的线宽
   resL@cnLineDashPattern           = 2              ;设置等值线为虚线样式,数字2代表特定的虚线模式
   resL@cnLineColor                 = "red"          ;设置等值线的颜色
   resL@cnInfoLabelOn               = False        ;禁用等值线图的信息标签
   resL@cnLevelSelectionMode        = "ExplicitLevels"   ;设置等值线的级别选择模式为显式级别
   resL@cnLevels                    = (/ 0.5 /)        ;设置显式等值线级别为0.5。这意味着只有值为0.5的等值线会被绘制

   resLa = resL
   resLa@cnLineThicknessF           = 1.5        ;设置 resLa 资源中的等值线线宽
   resLa@cnLineColor                = "black"    ;设置 resLa 资源中的等值线颜色
   resLb = resLa            
   resLb@cnLineColor                = "red"     ;设置 resLb 资源中的等值线颜色

   resLa = resL
   resLa@cnLineThicknessF           = 1.5
   resLa@cnLineDashPattern          = 0
   resLa@cnLineColor                = "black"

   resLb = resLa
   resLb@cnLineColor                = "red"
   resL0 = resLa
   resL0@cnLevels                   = (/ 0./)  ;设置 resL0 资源中的等值线级别为0
   resL3k = resLb
   resL3k@cnLevels                  = (/ 3000./)  ;设置 resL3k 资源中的等值线级别

   resV                             = res
   resV@vcMinDistanceF              = 0.02 ;0.0305       ;控制向量之间的最小距离,用于调整向量密度

   resV@vcRefAnnoOn                 = True         ;显示参考向量的注释
   resV@vcRefAnnoSide               = "Top"           ;指定参考向量注释显示在向量的哪一侧,这里设置为顶部
   resV@vcRefAnnoOrthogonalPosF     = -0.320008         ;控制注释与向量之间的垂直位置
   resV@vcRefAnnoBackgroundColor    = "gray99"         ;指定参考向量注释的背景颜色
   resV@vcRefAnnoString2            = ""             ;这里将其设置为空字符串,意味着没有第二个注释字符串
   resV@vcRefAnnoFontHeightF        = 0.018           ;指定参考向量注释的字体高度为 0.018
   resV@vcGlyphStyle                = "CurlyVector"    ;设置向量样式为弯曲箭头(CurlyVector)
   resV@vcLineArrowThicknessF       = 1.2         ;0.8   ;指定向量箭头的线宽
   resV@vcLineArrowColor            = "grey30"          ;指定向量箭头的颜色
   resV@vcLineArrowHeadMaxSizeF     = 0.008            ;指定向量箭头最大头部大小
   resV@vcLineArrowHeadMinSizeF     = 0.008           ;指定向量箭头最小头部大小
   resV@vcRefAnnoString1            = "200"           ;指定第一个参考向量注释字符串
   resV@vcRefMagnitudeF             = 200.          ;设置参考向量的大小
   resV@vcRefLengthF                = 0.02         ;设置参考向量的长度
   resV@vcRefAnnoPerimOn = False

   resT                             = res
   resT@cnInfoLabelOn               = False          ;禁用等值线图的信息标签
   resT@cnLinesOn                   = False      ;禁用等值线的绘制
   resT@cnLineLabelsOn              = False         ;禁用等值线上的标签
   resT@cnFillScaleF                = 1.0       ;设置填充比例因子为1.0,这会影响填充颜色的强度
   resT@cnFillColor                 = "grey40"   ;设置填充颜色为 “grey40”(40%灰度)
   resT@cnLevelSelectionMode        = "ManualLevels"   ;设置等值线级别选择模式为手动
   resT@cnMinLevelValF              = 0.           ;设置等值线图的最小级别值为0
   resT@cnMaxLevelValF              = 0.95          ;设置等值线图的最大级别
   resT@cnLevelSpacingF             = 0.05       ;设置等值线级别的间距
   resT@cnFillDotSizeF              = 0.00204         ; 设置填充点的尺寸

   resD                             = True
   resD@gsnDraw                     = False      ;禁用绘图(假设这是在正确的资源字典 resD 中)
   resD@gsnFrame                    = False      ; 禁用框架的绘制(假设这是在正确的资源字典 resD 中)
   resD@cnLevelSelectionMode        = "ExplicitLevels"  ;设置等值线级别选择模式为显式级别
   resD@cnLevels                    = (/0.05, 0.95 /)  ;设置显式等值线级别
   resD@gsnShadeFillType            = "pattern"      ;设置阴影填充类型为图案
   resD@gsnShadeLow                 = 17       ;设置阴影图案的低值(假设这是在正确的资源字典 resD 中)

   ;---------------------------------------------------

   resS1                         = resS
   resS1@cnFillPalette           = "MPL_GnBu"
   resS1@cnFillColors           := (/0,2,18,34,50,66,82,98,105,114/)
   resS1@cnLevels               := (/0.5,1,2,3,4,5,6,8,10 /)   

;  resS1@cnFillColors         :=(/"goldenrod1", "white","PaleGreen"/)
;  resS1@cnLevels             := (/ -0.5,0.5 /) ; fspan(0.5,8.0,16)
   resS1@lbLabelBarOn            = False
   resS1@vpHeightF               = 0.3
   resS1@vpWidthF                = 0.4
   ;--------------------

   resV1                         = resV
   resV1@vcLineArrowThicknessF   = 1.4
   resV1@vcLineArrowColor        = "black"             ;"brown"
   resV1@vcRefAnnoString1        = "200"
   resV1@vcRefMagnitudeF         = 200.
   ;============================================================================
   resP = True
   resP@gsnFrame           = False
   resP@gsnPanelLabelBar                = True
   resP@lbLabelFontHeightF          = 0.012        ;控制标签栏中数据字体的高度
   resP@lbOrientation               = "Horizontal"
   resP@lbTitleOn                   = True
   resP@lbTitlePosition             = "Top"
   resP@lbTitleDirection            = "Across"
   resP@lbTitleString               = "" ;lb_str
   resP@lbTitleFontHeightF = 0.015                ;控制标签字体的高度
   resP@pmLabelBarWidthF            = 0.6
   resP@pmLabelBarHeightF           = 0.05
   resP@pmLabelBarOrthogonalPosF    = -0.05
   resP@pmLabelBarParallelPosF      = 0.05
   resP@pmTickMarkDisplayMode       = "Always"
   resP@lbTitleString           = "Precipitation (mm d~S~-1~N~) " ;lbstr
;   resP@pmLabelBarParallelPosF  = -0.124568603432
   resP@lbBoxEndCapStyle       = "TriangleBothEnds"  ;图例框的两端将显示为三角形。
   resP@gsnPanelMainString = "precipitation"
;--------------------------------------------------------------------------------------------------
   xf      := (/ 0.05,0.05,0.05, 0.55,0.55,0.55 /)
   yf      := (/ 0.95,0.68,0.41, 0.95,0.68,0.41 /)

   left  := strB
   cent  := strB

;   lon1  = 80.
;   lon2  = 100.
;   lon3  = 90.
   xstr  = "PRECT_"
   ustr  = "VIB_UQ_"
   vstr  = "VIB_VQ_"
   wstr  = "OMEGA_"
   coeff = 100.

   do j = 0, dimsizes(ofnAs)-1                       ;ofnAs是输出的文件名字        
      ofn   = ofnAs(j)
      wks   = gsn_open_wks( oft, ofn )
      plotSArray = new(6, graphic)
      do i = 0, dimsizes(case1s)-1l
         case  := case1s(i)                        ;case1s   = (/"E560_a","E560_b","E560_c","L560_a","L560_b","L560_c"/)
         fp    := fps(i)                           ;fps      = dir_data + case1s + "_process.nc"输入文件名
         fe    := fes(i)                           ; 输入基础文件名fes = dir_data + case1s + ".cam.ele.nc"
         ft    := fts(i)                           ;fts= (/topoE,topoE,topoE,topoL,topoL,topoL/)   ;??边界
         x     := read_in_var( fp, xstr+strC(j)+"_m" )           ;strC     = (/"ann","sum","win"/)
         u     := read_in_var( fp, ustr+strC(j)+"_m" )
         v     := read_in_var( fp, vstr+strC(j)+"_m" )
         lf    := read_in_var( fe, "LANDFRAC" )
         top   := read_in_var( ft, "topo")          ;???????????????
         left(i)= strA(i) + case2s(i)              ;图的左侧字符
;        resS1@mpDataSetName     = topos(i)
          a  := plot_shade_line2_vector(wks,x,top,top,u,v,resS1,resL0,resL3k,resV1,xf,yf,left,i,plotSArray)
         plotSArray(i) = a
         ;自定义函数  画年平均和夏季冬季
      end do
            gsn_panel(wks,  plotSArray , (/3,2/), resP)
   end do

   do j = 0, dimsizes(ofnBs)-1           ;画四季 ofnBs= dir_figs +grop+ "pt_water_sea_"+(/"djf","mam","jja","son"/)
      ofn   = ofnBs(j)
      wks   = gsn_open_wks( oft, ofn )
      plotSArray1 = new(6, graphic)
      k     = strD(j)                    ;strD     = ispan(0,3,1)
      do i = 0, dimsizes(case1s)-1
         case  := case1s(i)              ;case1s   = (/"E560_a","E560_b","E560_c","L560_a","L560_b","L560_c"/)
         fp    := fps(i)                 ;fps      = dir_data + case1s + "_process.nc"输入文件名
         fe    := fes(i)                 ; 输入基础文件名fes = dir_data + case1s + ".cam.ele.nc"
         ft    := fts(i)                 ;fts= (/topoE,topoE,topoE,topoL,topoL,topoL/)   ;??边界
         x     := read_in_var( fp,  "PRECT_sea_m" )
         u     := read_in_var( fp, "VIB_UQ_sea_m" )
         v     := read_in_var( fp, "VIB_VQ_sea_m" )
         lf    := read_in_var( fe, "LANDFRAC" )
         top   := read_in_var( ft, "topo" )           ;??????????

         left(i)= strA(i) + case2s(i)

;         a     := plot_shade_vector(wks,x(k,:,:),u(k,:,:),v(k,:,:), resS1,resV1,xf,yf,left,cent, i)
          a     := plot_shade_line2_vector(wks,x(k,:,:),top,top,u(k,:,:),v(k,:,:), resS1,resL0,resL3k,resV1,xf,yf,left,i,plotSArray)
          ;画 四季的图
          plotSArray1(i) = a
      end do
      gsn_panel(wks, plotSArray1, (/3,2/), resP)      
   end do

   ;=========================================================  
   xf      := (/ 0.05,0.05,0.05, 0.55,0.55,0.55 /)
   yf      := (/ 0.95,0.68,0.41, 0.95,0.68,0.41 /)
   t  = 0.05
   i1 = (/ 4,4,5,5 /)
   i2 = (/ 0,2,1,3 /)
;   i1 = (/ 2,2,3,3 /)
;   i2 = (/ 0,1,0,1 /)

   resS2                        = resS
;  resS1@cnFillPalette           = "precip_diff_12lev" ; "MPL_GnBu"
;  resS2@cnFillPalette           = "MPL_BrBG" ; "MPL_GnBu"
;   resS2@cnFillPalette           = "MPL_BrBG"
;   resS2@cnFillColors           := (/31,33,35,38,42,47,49,52,55,71,74,77,79,82,92,94,96,98/)
;   resS2@cnLevels               := (/-4.0,-3.0,-2.0,-1.0,-0.8,-0.6,-0.4,-0.2,0,0.2,0.4,0.6,0.8,1.0,2.0,3.0,4.0/)
;   resS2@cnLevels               := (/0.5,1,2,3,4,5,6,8,10 /)   
;   resS2@cnFillPalette           = "temp_diff_18lev"
;      resS2@cnFillColors           := (/16,15,14,13,12,10,8,7,6,5,4,3/)
;   resS2@cnLevels               := (/-4.0,-2.0,-1.0,-0.5,-0.2,0,0.2,0.5,1.0,2.0,4.0/)
   resS2@cnFillPalette           = "precip_diff_12lev"
   resS2@cnFillColors           := (/2,3,4,5,6,7,9,10,11,12,13,14/)
   resS2@cnLevels               := (/-4.0,-2.0,-1.0,-0.5,-0.2,0,0.2,0.5,1.0,2.0,3.0,4.0/)
   resS2@lbLabelBarOn            = False
   resS2@cnLinesOn               = False
   resS2@cnLineLabelsOn              = False

   resS2@vpHeightF               = 0.3
   resS2@vpWidthF                = 0.4
   resS2@mpDataSetName           = land0



   resV1@vcLineArrowColor        = "grey30" ;"red3"
   resV1@vcRefAnnoString1        = "150"
   resV1@vcRefMagnitudeF         = 150.
   resV1@vcMinDistanceF          = 0.0304
   resV1@vcRefLengthF            = 0.0422  
   resV1@vcLineArrowHeadMaxSizeF = 0.01
   resV1@vcLineArrowHeadMinSizeF = 0.01




   do j = 0,dimsizes(ofnAsd)-1                     ;画(/"ann","sum","win"/)的差值  c-a;c-b
      ofn   = ofnAsd(j)
      plotSArray2 = new(4, graphic)                            ;  ofnAsd   = ofnAs + "_diff"
      wks   = gsn_open_wks( oft, ofn )           
      do i = 0, dimsizes(i1)-1
         case1 := case1s(i1(i))                    ; i1 = (/ 4,4,5,5 /) (/"E560_a","L560_a","E560_b","L560_b","E560_c","L560_c"/)
         case2 := case1s(i2(i))                    ; i2 = (/ 0,2,1,3 /)
         fp1   := fps(i1(i))                       ;fps      = dir_data + case1s + "_process.nc"输入文件名
         fp2   := fps(i2(i))
         fe1   := fes(i1(i))
         fe2   := fes(i2(i))
         ft1   := fts(i1(i))

         lf1   := read_in_var( fe1, "LANDFRAC" )
         lf2   := read_in_var( fe2, "LANDFRAC" )
         top1  := read_in_var( ft1, "topo")


         x     := read_in_var_diff( fp1,fp2,  "PRECT_"+strC(j)+"_m" )
         u     := read_in_var_diff( fp1,fp2, "VIB_UQ_"+strC(j)+"_m" )
         v     := read_in_var_diff( fp1,fp2, "VIB_VQ_"+strC(j)+"_m" )

         tx    := read_in_var_difftest( fp1,fp2, "PRECT_"+strC(j)+"_m", "PRECT_"+strC(j)+"_v", "nyear" )
         tu    := read_in_var_difftest( fp1,fp2, "VIB_UQ_"+strC(j)+"_m","VIB_UQ_"+strC(j)+"_v","nyear" );???函数在哪里 没找到
         tv    := read_in_var_difftest( fp1,fp2, "VIB_VQ_"+strC(j)+"_m","VIB_VQ_"+strC(j)+"_v","nyear" )
;exit
         u      = (/where((tu.le.t).or.(tv.le.t), u, u@_FillValue)/)
         v      = (/where((tu.le.t).or.(tv.le.t), v, v@_FillValue)/)

         left(i)= strA1(i)+case2s(i1(i))+" - "+case2s(i2(i))
         a   = plot_shade_line2_vector_test(wks,x,top1,top1,u,v,tx,resS2,resL0,resL3k,resV1,resT,resD, xf,yf,left,i,plotSArray2)
      end do
      gsn_panel(wks, plotSArray2, (/2,2/), resP)
   end do

   do j = 0,dimsizes(ofnBsd)-1                        ;画四个季节的差值ofnBs    = dir_figs +grop+ "pt_water_sea_"+(/"djf","mam","jja","son"/)
      ofn   = ofnBsd(j)
      wks   = gsn_open_wks( oft, ofn )
      plotSArray3 = new(4, graphic)
      do i = 0, dimsizes(i1)-1
         case1 := case1s(i1(i))
         case2 := case1s(i2(i))
         fp1   := fps(i1(i)) ;dir_data + case1 + "_process.nc"
         fp2   := fps(i2(i)) ;dir_data + case2 + "_process.nc"
         fe1   := fes(i1(i))
         fe2   := fes(i2(i))
         ft1   := fts(i1(i))

         lf1   := read_in_var( fe1, "LANDFRAC" )
         lf2   := read_in_var( fe2, "LANDFRAC" )
         top1  := read_in_var( ft1, "topo")

         x     := read_in_var_diff( fp1,fp2,  "PRECT_sea_m" )
         u     := read_in_var_diff( fp1,fp2, "VIB_UQ_sea_m" )
         v     := read_in_var_diff( fp1,fp2, "VIB_VQ_sea_m" )

         tx    := read_in_var_difftest( fp1,fp2, "PRECT_sea_m", "PRECT_sea_v", "nyear" )
         tu    := read_in_var_difftest( fp1,fp2, "VIB_UQ_sea_m","VIB_UQ_sea_v","nyear" )
         tv    := read_in_var_difftest( fp1,fp2, "VIB_VQ_sea_m","VIB_VQ_sea_v","nyear" )

         u      = (/where((tu.le.t).or.(tv.le.t), u, u@_FillValue)/)
         v      = (/where((tu.le.t).or.(tv.le.t), v, v@_FillValue)/)

         left(i)= strA1(i)+case2s(i1(i))+" - "+case2s(i2(i))

         a = plot_shade_line2_vector_test(wks,x(j,:,:),top1,top1,u(j,:,:),v(j,:,:),tx(j,:,:),resS2,resL0,resL3k,resV1,resT,resD, xf,yf,left,i,plotSArray3)
;         a = plot_shade_line2_vector(wks,x(j,:,:),top1,top1,u(j,:,:),v(j,:,:),resS1,resL0,resL3k,resV1,xf,yf,left,cent, i)
      plotSArray3(i) = a
      end do
      gsn_panel(wks, plotSArray3, (/2,2/), resP)
   end do

print("---------------------------------------------end")
end




我在利用NCL绘制深时降雨量,但是老是提示一下这个错误,我不知道怎么解决。求大佬帮助!
warning:ContourPlotSetValues: Data values out of range of levels set by EXPLICITLEVELS mode
warning:ContourPlotSetValues: Data values out of range of levels set by EXPLICITLEVELS mode
warning:ContourPlotSetValues: Data values out of range of levels set by EXPLICITLEVELS mode
warning:ContourPlotSetValues: Data values out of range of levels set by EXPLICITLEVELS mode
fatal:Subscript out of range, error in subscript #0
fatal:An error occurred reading case1s
fatal:["Execute.c":8637]:Execute: Error occurred at or near line 339 in file preci.ncl

preci.ncl

21 KB, 下载次数: 0, 下载积分: 金钱 -5

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

新浪微博达人勋

发表于 2025-2-22 17:52:41 | 显示全部楼层
339行下标越界,你定义的case1s只有四个元素,既然i1(i)会有5,那肯定越界了。你脚本开头的地方有一处注释掉的case1s的定义,和报错那行的注释是一样的,是不是改程序的时候忘记改了。
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2025-2-23 21:10:35 | 显示全部楼层
很萌的萌新 发表于 2025-2-22 17:52
339行下标越界,你定义的case1s只有四个元素,既然i1(i)会有5,那肯定越界了。你脚本开头的地方有一处注释 ...

这个我注意到了,所以我才测试过这两行:
;   i1 = (/ 2,2,3,3 /)
;   i2 = (/ 0,1,0,1 /)
但是是直接失败了,一张图都没有。不该只是生成_diff的图没有
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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