DKRZ NCL using time coordinate variable with units yyyymm#

If the time coordinate variable has the units yyyymm the time values are something like

200001, 200002, 200003,…, 200012, 200101, 200102,…, 200112, 200201,…

These leaps between December and January of a year using the yyyymm format are the reason why a xy-plot looks like a stair. To get the correct x-axis you have to set some additional resources (tmXBMode = “Explicit”, tmXBValues, tmXBMinorValues, tmXBLabels) which are used for the lower plot in the panel.

Example script:

;--------------------------------------------------------------------
; DKRZ NCL exampl: tickmark_resources_xy.ncl
;
; Description:   Demonstrate the correct use of the time coordinate
;                variable (yyyymm)
; 03.07.18 kmf
;--------------------------------------------------------------------
;-- open workstation
 wks_type = "png" ;-- graphic output type
 wks_type@wkWidth = 1200 ;-- width of PNG file
 wks_type@wkHeight = 1200 ;-- height if PNG file
 wks = gsn_open_wks(wks_type,"plot_tickmark_resources_xy")

;-- resource settings
 res = True
 res@gsnDraw = False
 res@gsnFrame = False

;-- x-axis title
 res@tiXAxisString = "time" ;-- x-axis title string
 res@tiXAxisFont = 30 ;-- x-axis title font (courier-bold)
 res@tiXAxisFontHeightF = 0.014 ;-- x-axis title font size

;-- y-axis title
 res@tiYAxisString = "y"    ;-- y-axis title string
 res@tiYAxisFont = 30 ;-- y-axis title font (courier-bold)
 res@tiYAxisFontHeightF = 0.014 ;-- y-axis title font size

;-- axis border line color and thickness
 res@tmBorderLineColor = "blue" ;-- x- and y-axis line color
 res@tmBorderThicknessF = 8. ;-- x- and y-axis line thickness

;-- bottom x-axis label resources
 res@tmXBLabelFontHeightF = 0.012 ;-- bottom x-axis label font size
 res@tmXBLabelFontColor = "red" ;-- bottom x-axis label color

 res@tmXBMajorLineColor = "red" ;-- bottom x-axis major tickmark color
 res@tmXBMinorLineColor = "red" ;-- bottom x-axis minor tickmark color
 res@tmXBMajorThicknessF = 5. ;-- bottom x-axis major tickmarks thickness
 res@tmXBMinorThicknessF = 5. ;-- bottom x-axis minor tickmarks thickness

;-- left y-axis label resources
 res@tmYLLabelFontHeightF = 0.012 ;-- left y-axis label font size
 res@tmYLLabelFontColor = "blue" ;-- left y-axis label color

 res@tmYLMajorLineColor = "blue" ;-- left y-axis major tickmark color
 res@tmYLMinorLineColor = "blue" ;-- left y-axis minor tickmark color
 res@tmYLMajorThicknessF = 5. ;-- left y-axis major tickmarks thickness
 res@tmYLMinorThicknessF = 5. ;-- left y-axis minor tickmarks thickness

;-- viewport settings
 res@vpXF = 0.1 ;-- set viewport x-position
 res@vpYF = 0.89 ;-- set viewport y-position
 res@vpWidthF = 0.85 ;-- set viewport width
 res@vpHeightF = 0.38 ;-- set viewport height

;-- time x-axis settings
 time = yyyymm_time(2000,2009,"integer") ;-- creates a 1D array containing year-month (yyyymm) values

;!!!
;!!! The time array values are now 200001, 200002, 200003,..., 200012, 200101,... !!!
;!!! --------------
;!!! These leaps are the reason why the xy-plot line looks like a stair!
;!!!

 ntime = dimsizes(time) ;-- number of time steps

;-- dummy data settings
 y = ispan(1,ntime,1) ;-- generate data array
 y!0 = "time" ;-- set named dimension time
 y&time = time                                        ;-- reference time coordinate variable

;-- x-axis resource settings
 res@xyLabelMode = "Custom" ;-- xy-plot line label mode
 res@xyExplicitLabels = "my label" ;-- label the xy-plot line
 res@xyLineLabelFontHeightF = 0.018 ;-- size of the label
 res@xyLineThicknessF = 2.0 ;-- xy-plot line thickness
 res@xyLineColor = "red" ;-- xy-plot line color
 res@xyLineDashSegLenF = 0.3                  ;-- distance between xy-plot line labels

;-- title string resources
 res@tiMainFontHeightF = 0.022 ;-- title font size
 res@tiMainString = "wrong use of the time coordinate variable (yyyymm)" ;-- title string

;-- create the plot in memory
 plot1 = gsn_csm_xy(wks,time,y,res)

;--------------------------------------------------------------------
;-- second plot
;--------------------------------------------------------------------
;-- generate time index and years arrays for explicit x-axis use
 inttime = ispan(1,ntime,1) ;-- create an index array for x-axis dimension time
 years = str_get_cols(tostring(time),0,3) ;-- retrieve the years

;-- generate the time axis labels
 tlabels = new(ntime,"string") ;-- create new array for time x-axis labels
 tlabels = "" ;-- initialize tlabels array
 yr = years(0) ;-- init yr
 tlabels(0) = yr ;-- first label

 do i=1,ntime-1
    if(years(i) .ne. yr) then
       tlabels(i) = years(i) ;-- we want only the first year entries of years array
       yr = years(i) ;-- next year
    end if
 end do

;-- x-axis resource settings
 res@tmXBMode = "Explicit" ;-- explicit setting of tick marks and labels
 res@tmXBValues = inttime(::12) ;-- locations for major tick marks
 res@tmXBMinorValues = inttime(::3) ;-- locations for minor tick marks (tmXBMode "Ecplicit")
 res@tmXBLabels = tlabels(::12) ;-- labels of major tick marks

;-- change the title string
 res@tiMainString = "correct use of the time coordinate variable (yyyymm)" ;-- title string

;-- create the plot in memory
 plot2 = gsn_csm_xy(wks,inttime,y,res)

;-- panel resources
 pres = True
 pres@gsnPanelYWhiteSpacePercent = 5 ;-- more space between the plots
 pres@gsnPanelMainString = "Data vs. Time" ;-- panel title string

;-- plot the panel and advance the frame
 gsn_panel(wks,(/plot1,plot2/),(/2,1/),pres)

Result:

../../../../../../_images/plot_tickmark_resources_xy_w400.png