# HG changeset patch # User Rik # Date 1478993669 28800 # Node ID ee34028f63fc6efcd7a01926ca842b1ea102c2ba # Parent e078f56077621617916deb99e8817a7598e58871 datetick.m: Fix unequal spacing of months and years (bug #39727). * datetick.m: For else clauses covering months and years, construct an appropriate datevec entity and then convert that with datenum. diff -r e078f5607762 -r ee34028f63fc scripts/plot/appearance/datetick.m --- a/scripts/plot/appearance/datetick.m Thu Nov 10 20:30:00 2016 -0800 +++ b/scripts/plot/appearance/datetick.m Sat Nov 12 15:34:29 2016 -0800 @@ -188,6 +188,7 @@ nticks = (xmax - xmin) / sep + 1; xmin *= scl; xmax *= scl; + ticks = xmin + [0 : nticks - 1] / (nticks - 1) * (xmax - xmin); else [ymin, mmin, dmin] = datevec (xmin); [ymax, mmax, dmax] = datevec (xmax); @@ -201,19 +202,25 @@ xmin = sep * floor (xmin / sep); xmax = sep * ceil (xmax / sep); nticks = (xmax - xmin) / sep + 1; + ticks = xmin + [0 : nticks - 1] / (nticks - 1) * (xmax - xmin); elseif (maxyear - minyear < N) - sep = __calc_tick_sep__ (minmonth , maxmonth); - xmin = datenum (ymin, sep * floor (minmonth / sep), 1); - xmax = datenum (ymax, sep * ceil (maxmonth / sep), 1); - nticks = ceil (maxmonth / sep) - floor (minmonth / sep) + 1; + sep = __calc_tick_sep__ (minmonth, maxmonth); + minyear = floor (minyear); + minmonth = sep * floor (minmonth / sep); + minmonth = ifelse (minmonth == 0, 1, minmonth); + maxmonth = sep * ceil (maxmonth / sep); + rangemonth = (minmonth:sep:maxmonth)'; + ticks = datenum ([repmat(minyear, size(rangemonth)), ... + rangemonth, ... + ones(size (rangemonth))]); else - sep = __calc_tick_sep__ (minyear , maxyear); - xmin = datenum (sep * floor (minyear / sep), 1, 1); - xmax = datenum (sep * ceil (maxyear / sep), 1, 1); - nticks = ceil (maxyear / sep) - floor (minyear / sep) + 1; + sep = __calc_tick_sep__ (minyear, maxyear); + minyear = sep * floor (minyear / sep); + maxyear = sep * ceil (maxyear / sep); + rangeyear = (minyear:sep:maxyear)'; + ticks = datenum ([rangeyear, ones(rows(rangeyear),2)]); endif endif - ticks = xmin + [0 : nticks - 1] / (nticks - 1) * (xmax - xmin); endif if (isempty (form))