DKRZ NCL add significance points (sig = 1) to contour plot#

Example script:

;--------------------------------------------------------------------
; DKRZ NCL Example:    significance_points_per_grid_cell.ncl
;
; Description:         - draw contour plot
;                      - add dots on grid cells when significance = 1
;                      - use dummy data
;                      - use colormap GMT_gray
; 16.07.18  kmf
;--------------------------------------------------------------------
begin
;-- generate lat and lon arrays with named dimensions
  nlat      =  45
  nlon      =  90
  lat       =  fspan( -89.5, 89.5,nlat)
  lon       =  fspan(-179.5,179.5,nlon)
  lat@units = "degrees_north"
  lon@units = "degrees_east"

;-- generate dummy data with named dimensions
  data     = random_uniform(0,20,(/nlat,nlon/))
  data!0   = "lat"
  data!1   = "lon"
  data&lat =  lat
  data&lon =  lon

;-- generate dummy significance data (0/1)
  sig  = random_uniform(0,1,(/nlat,nlon/))
  sig!0   = "lat"
  sig!1   = "lon"
  sig&lat =  lat
  sig&lon =  lon
  sig     = where(sig .gt. 0.9, 1,0)

;-- colormap; we want to use only the brighter grays
  cmap  = read_colormap_file("GMT_gray")
  cmap := cmap(4::,:)

;-- open workstation
  wks_type          = "png"
  wks_type@wkWidth  = 1200
  wks_type@wkHeight = 1200
  wks = gsn_open_wks(wks_type,"plot_significance_ppgc")

;-- contour plot resources
  res                      =  True
  res@gsnDraw              =  False
  res@gsnFrame             =  False
  res@gsnMaximize          =  True

  res@cnFillMode           = "RasterFill"
  res@cnFillOn             =  True
  res@cnLinesOn            =  False
  res@cnInfoLabelOn        =  False
  res@cnFillPalette        =  cmap
  res@cnLevelSelectionMode = "ManualLevels"
  res@cnMinLevelValF       =   0.
  res@cnMaxLevelValF       =  20.
  res@cnLevelSpacingF      =   5.

;-- draw the contour plot of variable data
  plot = gsn_csm_contour_map(wks,data,res)
;  draw(plot)

;-- retrieve the indices of significance (sig = 1)
  sig1d    = ndtooned(sig)
  get_nsig = dimsizes(ind(sig1d .eq. 1))
  indices  = ind_resolve(ind(sig1d .eq.1),dimsizes(sig))

;-- polymarker resources
  plmres                    =  True
  plmres@gsMarkerSizeF      =  0.003            ;-- marker size (default: 0.007)
  plmres@gsMarkerIndex      =  16               ;-- filled dots

;-- draw the polymarker
  do i=0,get_nsig-1
     str = unique_string("plmark")
     plot@$str$ = gsn_add_polymarker(wks,plot,lon(indices(i,1)),lat(indices(i,0)),plmres)
  end do

;-- draw the plot and advance the frame
  draw(plot)
  frame(wks)

end

Result:

../../../../../../_images/plot_significance_ppgc_w400.png