Mercurial > octave
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