Mercurial > hg > octave-nkf
diff libinterp/corefcn/graphics.cc @ 18857:ec55f6870efb
Fix incorrect log axis minor ticks when axis range > 8 orders of magnitude (bug #39449).
* graphics.cc (axes::properties::calc_ticks_and_lims): Always use a tick
separation of 1 order of magnitude for logscale plots.
author | Rik <rik@octave.org> |
---|---|
date | Wed, 30 Apr 2014 08:24:08 -0700 |
parents | 44f0d1a53ead |
children | d57a83f2d73e |
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.cc +++ b/libinterp/corefcn/graphics.cc @@ -6424,11 +6424,7 @@ double tmp; // FIXME: should this be checked for somewhere else? (i.e. set{x,y,z}lim) if (hi < lo) - { - tmp = hi; - hi = lo; - lo = tmp; - } + std::swap (hi, lo); if (is_logscale) { @@ -6445,15 +6441,17 @@ } } - double tick_sep = calc_tick_sep (lo , hi); - - if (is_logscale && ! (xisinf (hi) || xisinf (lo))) - { - // FIXME: what if (hi-lo) < tick_sep? - // ex: loglog ([1 1.1]) - tick_sep = std::max (tick_sep, 1.); - tick_sep = std::ceil (tick_sep); - } + double tick_sep; + + if (is_logscale) + { + if (! (xisinf (hi) || xisinf (lo))) + tick_sep = 1; // Tick is every order of magnitude (bug #39449) + else + tick_sep = 0; + } + else + tick_sep = calc_tick_sep (lo , hi); int i1 = static_cast<int> (gnulib::floor (lo / tick_sep)); int i2 = static_cast<int> (std::ceil (hi / tick_sep));