<div dir="ltr">hi,<div>  i have made a landcover map, which includes indices from 1 to 19 and 31-32 , all is 22 categories.<div><br></div><div>but after i ploted them, only the 1 to 19 and 33 category appearing in figure, but the 31-32 these two category cannot be shown in figure.</div><div><br></div>those below is my NCL script:
</div><div><br></div><div><br></div><div>++++++++++++++++++++++++++++++++++</div><div><div><br></div><div>load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"</div><div>load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"</div><div>load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"</div><div>load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"</div><div>load "./shapefile_mask_data.ncl"</div><div><br></div><div>begin</div><div>forgname="globecover_hubei_liuhuan_usgs_ronghe_snow-ice1.txt"</div><div>fconname="globecover_huabei_liuhuan_usgs_new_allocate1.txt"</div><div><br></div><div>onlat=5403</div><div>omlon=5403</div><div><br></div><div>nnlat=1801</div><div>nmlon=1801</div><div><br></div><div>odat=new((/onlat,omlon/),"integer","No_FillValue")</div><div>ndat=new((/nnlat,nmlon/),"integer","No_FillValue")</div><div><br></div><div>odat=readAsciiTable(forgname,omlon,"integer",5)</div><div>ndat=asciiread(fconname,(/nnlat,nmlon/),"integer")</div><div>delete(odat@_FillValue)</div><div>delete(ndat@_FillValue)</div><div><br></div><div>;; confused lc</div><div>olat=new((/onlat/),"float","No_FillValue")</div><div>olon=new((/omlon/),"float","No_FillValue")</div><div><br></div><div>do i=0,onlat-1</div><div> olat(i)=45.00413067-i*0.0027778</div><div>end do</div><div><br></div><div><br></div><div>do j=0,omlon-1</div><div> olon(j)=109.99606533+j*0.0027778</div><div>end do</div><div><br></div><div>olat!0="lat"</div><div>olat@units="degrees_north"</div><div>olat@long_name="latitude"</div><div><br></div><div>olon!0="lon"</div><div>olon@units="degrees_east"</div><div>olon@long_name="longitude"</div><div><br></div><div>odat!0="lat"</div><div>odat!1="lon"</div><div>odat&lat=olat</div><div>odat&lon=olon</div><div>odat@units=""</div><div>odat@long_name="land cover confused with globaland30 and globercover"</div><div>odat@_FillValue = -999</div><div><br></div><div>;; new classified lc</div><div>nlat=new((/nnlat/),"float","No_FillValue")</div><div>nlon=new((/nmlon/),"float","No_FillValue")</div><div><br></div><div>do i=0,nnlat-1</div><div> nlat(i)=45.00413067-i*0.0083334</div><div>end do</div><div><br></div><div><br></div><div>do j=0,nmlon-1</div><div> nlon(j)=109.99606533+j*0.0083334</div><div>end do</div><div><br></div><div>nlat!0="lat"</div><div>nlat@units="degrees_north"</div><div>nlat@long_name="latitude"</div><div><br></div><div>nlon!0="lon"</div><div>nlon@units="degrees_east"</div><div>nlon@long_name="longitude"</div><div><br></div><div>ndat!0="lat"</div><div>ndat!1="lon"</div><div>ndat&lat=nlat</div><div>ndat&lon=nlon</div><div>ndat@units=""</div><div>ndat@long_name="land cover new categories after confused"</div><div>ndat@_FillValue = -999</div><div><br></div><div>print(odat(onlat-1,omlon-1))</div><div><br></div><div>;</div><div>; If you already have the mask NetCDF file, set this to False.</div><div>; Creating the mask can be slow!</div><div>;</div><div>   CREATE_MASK = True</div><div><br></div><div>;---Whether to draw lat/lon points and shapefile outlines</div><div>   ADD_LATLON_POINTS      = False</div><div>   ADD_SHAPEFILE_OUTLINES = True</div><div><br></div><div>;---Name of shapefile containing USA outlines</div><div>   shp_fname = "huan_6.shp"</div><div><br></div><div>;---Name of file to write mask to or to read mask from.</div><div>   mask_oname = "<a href="http://liuhuan_mask_300m.nc">liuhuan_mask_300m.nc</a>"</div><div>   mask_nname = "<a href="http://liuhuan_mask_1km.nc">liuhuan_mask_1km.nc</a>"</div><div><br></div><div>;---Rough area we are interested in. Everything outside this will be masked.</div><div>   minlon = 116.0</div><div>   maxlon = 116.8</div><div>   minlat =   39.6</div><div>   maxlat =   40.2</div><div><br></div><div>;; odat</div><div>if(CREATE_MASK) then</div><div>     print("Creating the mask file...")</div><div><br></div><div>;---Create a new mask using a shapefile of USA</div><div>     odims = dimsizes(odat)</div><div>     opto             = True</div><div>     opto@return_mask = True</div><div>;    opto@debug       = True</div><div>     opto@minlon      = minlon     ; Makes the shapefile masking</div><div>     opto@maxlon      = maxlon     ; go faster.</div><div>     opto@minlat      = minlat</div><div>     opto@maxlat      = maxlat</div><div>     odat_mask        = shapefile_mask_data(odat,shp_fname,opto)</div><div><br></div><div>;---Write new mask to file</div><div>     system("rm -f " + mask_oname)</div><div>     oout           = addfile(mask_oname,"c")</div><div>     oout->odat_mask = odat_mask</div><div>   else</div><div>     print("Reading mask off file.")</div><div><br></div><div>;---Read the new mask from the NetCDF file</div><div>     omask    = addfile(mask_oname,"r")</div><div>     odat_mask = omask->odat_mask</div><div>   end if</div><div><br></div><div>;; ndat</div><div>if(CREATE_MASK) then</div><div>     print("Creating the mask file...")</div><div><br></div><div>;---Create a new mask using a shapefile of USA</div><div>     ndims = dimsizes(ndat)</div><div>     optn             = True</div><div>     optn@return_mask = True</div><div>;    optn@debug       = True</div><div>     optn@minlon      = minlon     ; Makes the shapefile masking</div><div>     optn@maxlon      = maxlon     ; go faster.</div><div>     optn@minlat      = minlat</div><div>     optn@maxlat      = maxlat</div><div>     ndat_mask        = shapefile_mask_data(ndat,shp_fname,optn)</div><div><br></div><div>;---Write new mask to file</div><div>     system("rm -f " + mask_nname)</div><div>     nout           = addfile(mask_nname,"c")</div><div>     nout->ndat_mask = ndat_mask</div><div>   else</div><div>     print("Reading mask off file.")</div><div><br></div><div>;---Read the new mask from the NetCDF file</div><div>     nmask    = addfile(mask_nname,"r")</div><div>     ndat_mask = nmask->ndat_mask</div><div>   end if</div><div><br></div><div>;---Create masked data array</div><div>   omask = where(odat_mask.eq.1,odat,odat@_FillValue)</div><div>   copy_VarMeta(odat,omask)</div><div><br></div><div>;---Create masked data array</div><div>   nmask = where(ndat_mask.eq.1,ndat,ndat@_FillValue)</div><div>   copy_VarMeta(ndat,nmask)</div><div><br></div><div><br></div><div>  ;ind32=ind(ndtooned(nmask).eq.32)</div><div>  ;print(ind32)</div><div><br></div><div>  dimsnmk=dimsizes(nmask)</div><div>  do i=0,dimsnmk(0)-1</div><div>    do j=0,dimsnmk(1)-1</div><div>       if(any(ndat(i,j).eq.32)) then</div><div>          print(i+" "+j+" "+" "+ndat(i,j))</div><div>       end if</div><div>    end do</div><div>  end do</div><div><br></div><div>;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div>;; create plot</div><div>;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div><div>plot=new(2,"graphic")</div><div>info=(/                        \</div><div>      "1 urban_and_built-in"   ,\</div><div>      "2 dryland_cropland"     ,\</div><div>      "3 irrigated_cropland"   ,\</div><div>      "4 mixed_dry_cropland"   ,\</div><div>      "5 cropland_grassland"   ,\</div><div>      "6 cropland_woodland"    ,\</div><div>      "7 grassland"            ,\</div><div>      "8 shrubland"            ,\</div><div>      "9 mixed_shrub_grassland",\</div><div>      "10 savanna"              ,\</div><div>      "11 deciduous_broadleaf"  ,\</div><div>      "12 deciduous_needleleaf" ,\</div><div>      "13 evergreen_broadleaf"  ,\</div><div>      "14 evergreen_needleleaf" ,\</div><div>      "15 mixed_forest"         ,\</div><div>      "16 water"                ,\</div><div>      "17 herbaceous_wetland"   ,\</div><div>      "18 wooded_wetland"       ,\</div><div>      "19 barren_or_sparse"     ,\</div><div>      "31 low_intensity_res"    ,\</div><div>      "32 mid_intensity_res"    ,\</div><div>      "33 high_intensity_res"/)</div><div><br></div><div>ninfo=dimsizes(info)</div><div><br></div><div>  ninfo = dimsizes(info)        ; # of classifications</div><div><br></div><div><br></div><div>;************************************************</div><div>; create plot</div><div>;************************************************</div><div>  pltType = "png"               ; ps, pdf, png, x11, eps</div><div><br></div><div><br></div><div><br></div><div>  colorscheme =(/"red","lawngreen","mediumseagreen","springgreen",\</div><div>       "limegreen","darkolivegreen3","green","lightsalmon","green3",\</div><div>        "gold","palegreen","olivedrab3","chartreuse3","chartreuse",       \</div><div>        "darkgreen","blue","hotpink2","hotpink","light cyan",           \</div><div>        "khaki1","violetred1","purple3"/)</div><div><br></div><div>  ncolors = dimsizes(colorscheme)</div><div>  if (ninfo.ne.ncolors) then             ; make sure # of colors match categories (classes)</div><div>      print("size mismatch: ninfo="+ninfo+"   ncolors="+ncolors)</div><div>      exit</div><div>  end if</div><div><br></div><div>  wks = gsn_open_wks(pltType,"plot_origin_new_lc_test")</div><div>  plot=new(2,graphic)</div><div>  res                  = True                ; plot mods desired</div><div>  res@gsnDraw          = False</div><div>  res@gsnFrame         = False</div><div>  ;res@gsnMaximize      = True               ; ps, pdf</div><div>  res@gsnAddCyclic     = False</div><div><br></div><div>  ;res@mpMinLatF   = min(odat&lat)</div><div>  ;res@mpMaxLatF   = max(odat&lat)</div><div>  ;res@mpMinLonF   = min(odat&lon)</div><div>  ;res@mpMaxLonF   = max(odat&lon)</div><div><br></div><div>  res@cnFillOn         = True               ; color Fill</div><div>  res@cnFillMode       = "RasterFill"</div><div>  res@cnLinesOn        =  False             ; Turn off contour lines</div><div>  res@cnLineLabelsOn   =  False</div><div>  res@cnLevelSelectionMode = "ExplicitLevels" ; set explict contour levels</div><div>  res@cnLevels         = tobyte(ispan(1,ninfo-1,1)+1)</div><div>  res@cnFillPalette    = colorscheme        ; distinct colors for categories</div><div>  res@gsnSpreadColors  = False              ; use each color sequentially</div><div>  res@cnInfoLabelOn   = False</div><div><br></div><div><br></div><div>  res@mpFillOn         = False</div><div><br></div><div><br></div><div>  res@gsnAddCyclic   = False             ; regional data</div><div>  ;res@trGridType     = "TriangularMesh"</div><div>  res@tmXBLabelFontHeightF = 0.01        ; Make lon & lat text smaller</div><div>  res@tmYLLabelFontHeightF = res@tmXBLabelFontHeightF</div><div><br></div><div>  res@gsnLeftString  = ""</div><div>  res@gsnRightString = ""</div><div><br></div><div>  res1  =  True</div><div>  res1  =  res</div><div>  res1@mpMinLatF   = minlat</div><div>  res1@mpMaxLatF   = maxlat</div><div>  res1@mpMinLonF   = minlon</div><div>  res1@mpMaxLonF   = maxlon</div><div><br></div><div>  res1@tmXBMode    = "Explicit"</div><div>  res1@tmXBValues   = (/116.0,116.1,116.2,116.3,116.4,116.5,116.6,116.7,116.8/)</div><div>  res1@tmXBLabels  =  (/"116.0~S~o~N~E","116.1~S~o~N~E","116.2~S~o~N~E","116.3~S~o~N~E","116.4~S~o~N~E","116.5.0~S~o~N~E",\</div><div>                        "116.6~S~o~N~E","116.7~S~o~N~E","116.8~S~o~N~E"/)</div><div><br></div><div>  res1@tmYLMode    = "Explicit"</div><div>  res1@tmYLValues   = (/39.6,39.7,39.8,39.9,40.0,40.1,40.2/)</div><div>  res1@tmYLLabels  = (/"39.6~S~o~N~N","39.7~S~o~N~N","39.8~S~o~N~N","39.9~S~o~N~N","40.0~S~o~N~N","40.1~S~o~N~N","41.2~S~o~N~N"/)</div><div><br></div><div>  res1@tiMainString   = "confused LC"</div><div>  res1@lbLabelBarOn   =  False</div><div>  plot(0) = gsn_csm_contour_map_ce(wks, omask, res1) ; create plot</div><div><br></div><div>  res2 = True</div><div>  res2=res</div><div>  res2@mpMinLatF   = minlat</div><div>  res2@mpMaxLatF   = maxlat</div><div>  res2@mpMinLonF   = minlon</div><div>  res2@mpMaxLonF   = maxlon</div><div>  res2@lbLabelBarOn   =  False</div><div><br></div><div>  res2@tmXBMode    = "Explicit"</div><div>  res2@tmXBValues  = (/116.0,116.1,116.2,116.3,116.4,116.5,116.6,116.7,116.8/)</div><div>  res2@tmXBLabels  = (/"116.0~S~o~N~E","116.1~S~o~N~E","116.2~S~o~N~E","116.3~S~o~N~E","116.4~S~o~N~E","116.5.0~S~o~N~E",\</div><div>                       "116.6~S~o~N~E","116.7~S~o~N~E","116.8~S~o~N~E"/)</div><div><br></div><div>  res2@tmYLMode    = "Explicit"</div><div>  res2@tmYLValues   = (/39.6,39.7,39.8,39.9,40.0,40.1,40.2/)</div><div>  res2@tmYLLabels  = (/"39.6~S~o~N~N","39.7~S~o~N~N","39.8~S~o~N~N","39.9~S~o~N~N","40.0~S~o~N~N","40.1~S~o~N~N","41.2~S~o~N~N"/)</div><div><br></div><div>  res2@tiMainString =  "reclassified LC"</div><div>  plot(1) =  gsn_csm_contour_map_ce(wks,nmask,res2)</div><div><br></div><div>  pres = True</div><div>  pres@gsnFrame =  False</div><div>  pres@gsnPanelLabelBar  = True</div><div>  pres@lbLabelFontHeightF = 0.01</div><div>  pres@gsnPanelBottom = 0.05</div><div>  pres@lbLabelPosition  = "Center"           ; label position</div><div>  pres@lbLabelAlignment = "BoxCenters"       ; label orientation</div><div>  pres@cnLevels   =  (/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,\</div><div>                       31,32,33/)</div><div>  pres@lbLabelStrings    = (/"1","2","3","4","5","6","7","8","9","10",\</div><div>                           "11","12","13","14","15","16","17","18","19",\</div><div>                           "31","32","33"/)</div><div> ;pres@lbLabelStrings   = ispan(0,ninfo,1)</div><div>  ;pres@lbLabelStride    = 1</div><div>  pres@lbLabelAutoStride = True</div><div><br></div><div>  gsn_panel(wks,plot,(/1,2/),pres)</div><div><br></div><div>  rtxt = True</div><div>  rtxt@txJust        = "TopLeft"</div><div>  rtxt@txFontHeightF = 0.0125</div><div><br></div><div>  ; Add text: rows x columns of text (arbitrary)</div><div>; Usually must play with xx, yy and txFontHeightF</div><div><br></div><div>  nrow = 5       ; # rows</div><div>  ncol = 6       ; # columns</div><div><br></div><div>  n  = -1</div><div>  xx = 0.015                ; arbitrary</div><div>  do nc=0,ncol-1</div><div>     yy = 0.20</div><div>    do nr=0,nrow-1</div><div>       n = n+1</div><div>       if (n.le.(ninfo-1)) then</div><div>           gsn_text_ndc (wks,info(n),xx,yy,rtxt)</div><div>           yy = yy - 2*rtxt@txFontHeightF</div><div>       end if</div><div>    end do</div><div>    xx = xx + 0.20</div><div>  end do</div><div><br></div><div> ;draw(plot)</div><div> frame(wks)</div><div><br></div><div>end</div></div><div><br></div><div><br></div><div><br></div><div>++++++++++++++++++++++++++++++++++</div><div><br></div><div>i don't know  if the nested pic can show, so i attach it </div><div><br></div><div>i change the urban (denote with red color in left panel)  into impervious category (31,32,33,show in right panel), but eventually only 33 appeared, 31 and 32 disappeared.</div><div>the 31-32 exists in data.</div><div><br></div><div>can the ncl script  match the landcover index automatically?</div><div><br></div><div><br></div><div>would you please give me some advices for this problem which i have been confused some days?</div><div><br></div><div>thanks</div></div>