changeset 26874:69722280102c

Calculate distance of axis limits on log scale for logarithmic axes (bug #55876). * graphics.cc (axes::properties::check_axis_limits): For logarithmic axis scale, calculate the distance between the limits in decades.
author Markus Mützel <markus.muetzel@gmx.de>
date Sun, 10 Mar 2019 18:25:25 +0100
parents 9ec36417c262
children ce972086bfd6
files libinterp/corefcn/graphics.cc
diffstat 1 files changed, 11 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/graphics.cc	Sun Mar 10 16:40:35 2019 +0100
+++ b/libinterp/corefcn/graphics.cc	Sun Mar 10 18:25:25 2019 +0100
@@ -7640,18 +7640,17 @@
       do_update = true;
     }
   // FIXME: maybe this test should also be relative?
-  else if (std::abs (limits(0) - limits(1)) < sqrt (eps))
-    {
-      if (logscale)
-        {
-          limits(0) = (limits(0) < 0 ? 10.0 * limits(0) : 0.1 * limits(0));
-          limits(1) = (limits(1) < 0 ? 0.1 * limits(1) : 10.0 * limits(1));
-        }
-      else
-        {
-          limits(0) -= 0.1 * std::abs (limits(0));
-          limits(1) += 0.1 * std::abs (limits(1));
-        }
+  else if (! logscale && (std::abs (limits(0) - limits(1)) < sqrt (eps)))
+    {
+      limits(0) -= 0.1 * std::abs (limits(0));
+      limits(1) += 0.1 * std::abs (limits(1));
+      do_update = true;
+    }
+  else if (logscale
+           && (std::abs (std::log10 (limits(0) / limits(1))) < sqrt (eps)))
+    {
+      limits(0) = (limits(0) < 0 ? 10.0 * limits(0) : 0.1 * limits(0));
+      limits(1) = (limits(1) < 0 ? 0.1 * limits(1) : 10.0 * limits(1));
       do_update = true;
     }