From fc086f5937bc4945cc491803fc88c63f23565431 Mon Sep 17 00:00:00 2001 From: dsavoiu Date: Wed, 31 Jul 2013 17:55:35 +0200 Subject: [PATCH 1/3] auoscale correctly for log view --- lib/matplotlib/axes/_base.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 99f09156a006..5e1a234b5aa2 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -1907,8 +1907,13 @@ def autoscale_view(self, tight=None, scalex=True, scaley=True): expander=0.05) if self._xmargin > 0: delta = (x1 - x0) * self._xmargin - x0 -= delta - x1 += delta + xscale = self.get_xscale() + if xscale == 'log': + x0 *= delta + x1 /= delta + else: + x0 -= delta + x1 += delta if not _tight: x0, x1 = xlocator.view_limits(x0, x1) self.set_xbound(x0, x1) @@ -1926,8 +1931,13 @@ def autoscale_view(self, tight=None, scalex=True, scaley=True): expander=0.05) if self._ymargin > 0: delta = (y1 - y0) * self._ymargin - y0 -= delta - y1 += delta + yscale = self.get_yscale() + if yscale == 'log': + y0 *= delta + y1 /= delta + else: + y0 -= delta + y1 += delta if not _tight: y0, y1 = ylocator.view_limits(y0, y1) self.set_ybound(y0, y1) From f835cdfc33358b7544d410741817254deb4597c4 Mon Sep 17 00:00:00 2001 From: dsavoiu Date: Wed, 31 Jul 2013 18:37:32 +0200 Subject: [PATCH 2/3] corected margin formula for log plots --- lib/matplotlib/axes/_base.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 5e1a234b5aa2..d2214ce8779d 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -1906,14 +1906,19 @@ def autoscale_view(self, tight=None, scalex=True, scaley=True): x0, x1 = mtransforms.nonsingular(x0, x1, increasing=False, expander=0.05) if self._xmargin > 0: - delta = (x1 - x0) * self._xmargin xscale = self.get_xscale() + print x0, x1, if xscale == 'log': - x0 *= delta - x1 /= delta + delta = (x1 / x0) ** self._xmargin + print delta + x0 /= delta + x1 *= delta else: + delta = (x1 - x0) * self._xmargin + print delta x0 -= delta x1 += delta + print x0, x1 if not _tight: x0, x1 = xlocator.view_limits(x0, x1) self.set_xbound(x0, x1) @@ -1930,12 +1935,13 @@ def autoscale_view(self, tight=None, scalex=True, scaley=True): y0, y1 = mtransforms.nonsingular(y0, y1, increasing=False, expander=0.05) if self._ymargin > 0: - delta = (y1 - y0) * self._ymargin yscale = self.get_yscale() if yscale == 'log': - y0 *= delta - y1 /= delta + delta = (y1 / y0) ** self._ymargin + y0 /= delta + y1 *= delta else: + delta = (y1 - y0) * self._ymargin y0 -= delta y1 += delta if not _tight: From ea430ee5d5251a89c213fe5515813010e4d1a2f9 Mon Sep 17 00:00:00 2001 From: dsavoiu Date: Wed, 31 Jul 2013 18:41:38 +0200 Subject: [PATCH 3/3] removed prints for debug purposes --- lib/matplotlib/axes/_base.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index d2214ce8779d..a543c8e3f688 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -1907,18 +1907,14 @@ def autoscale_view(self, tight=None, scalex=True, scaley=True): expander=0.05) if self._xmargin > 0: xscale = self.get_xscale() - print x0, x1, if xscale == 'log': delta = (x1 / x0) ** self._xmargin - print delta x0 /= delta x1 *= delta else: delta = (x1 - x0) * self._xmargin - print delta x0 -= delta x1 += delta - print x0, x1 if not _tight: x0, x1 = xlocator.view_limits(x0, x1) self.set_xbound(x0, x1)