changeset 22510:00bf2e2de581

Keep aspect ratio of axes for "axis equal" (bug #49038). * axis.m: Keep aspect ratio even for axes which have their limit modes set to "manual".
author Markus Mützel <markus.muetzel@gmx.de>
date Fri, 09 Sep 2016 18:26:40 +0200
parents 4b691a4cf77b
children 1e81abd0314a
files scripts/plot/appearance/axis.m
diffstat 1 files changed, 20 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/plot/appearance/axis.m	Fri Sep 16 16:17:04 2016 -0400
+++ b/scripts/plot/appearance/axis.m	Fri Sep 09 18:26:40 2016 +0200
@@ -194,7 +194,26 @@
       set (ca, "dataaspectratiomode", "auto",
                "plotboxaspectratio", [1, 1, 1]);
     elseif (strcmp (ax, "equal"))
-      set (ca, "dataaspectratio", [1, 1, 1], "plotboxaspectratio", [5 4 4]);
+      ## Get position of axis in pixels
+      ca_units = get (ca, "units");
+      set (ca, "units", "pixels");
+      axis_pos = get (ca, "position");
+      set (ca, "units", ca_units);
+
+      pbar = get (ca, "PlotBoxAspectRatio");
+      dx = diff (__get_tight_lims__ (ca, "x"));
+      dy = diff (__get_tight_lims__ (ca, "y"));
+      dz = diff (__get_tight_lims__ (ca, "z"));
+      new_pbar = [dx dy dz];
+      if (dx/pbar(1) < dy/pbar(2))
+        set (ca, "xlimmode", "auto");
+        new_pbar(1) = dy / axis_pos(4)*axis_pos(3);
+      else
+        set (ca, "ylimmode", "auto");
+        new_pbar(2) = dx / axis_pos(3)*axis_pos(4);
+      endif
+      set (ca, "dataaspectratio", [1, 1, 1],
+               "plotboxaspectratio", new_pbar);
 
     elseif (strcmpi (ax, "normal"))
       ## Set plotboxaspectratio to something obtuse so that switching