From 5458d4ea76369571912346689a10c4621dcdb63d Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Wed, 30 Nov 2016 20:45:33 -0500 Subject: [PATCH 01/16] Use @property decorator in axisartist. --- lib/mpl_toolkits/axisartist/angle_helper.py | 18 +++++++----------- lib/mpl_toolkits/axisartist/axis_artist.py | 11 +++++------ lib/mpl_toolkits/axisartist/axislines.py | 5 ++--- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/lib/mpl_toolkits/axisartist/angle_helper.py b/lib/mpl_toolkits/axisartist/angle_helper.py index 7f2b5d338b7c..f947280ee5f7 100644 --- a/lib/mpl_toolkits/axisartist/angle_helper.py +++ b/lib/mpl_toolkits/axisartist/angle_helper.py @@ -168,21 +168,17 @@ def __init__(self, den, include_last=True): self.den = den self._include_last = include_last - def _get_nbins(self): + @property + def nbins(self): return self.den - def _set_nbins(self, v): + @nbins.setter + def nbins(self, v): self.den = v - nbins = property(_get_nbins, _set_nbins) - - def set_params(self, **kwargs): - if "nbins" in kwargs: - self.den = int(kwargs.pop("nbins")) - - if kwargs: - raise ValueError("Following keys are not processed: %s" - % ", ".join(kwargs)) + def set_params(self, nbins=None): + if nbins is not None: + self.den = int(nbins) class LocatorHMS(LocatorBase): diff --git a/lib/mpl_toolkits/axisartist/axis_artist.py b/lib/mpl_toolkits/axisartist/axis_artist.py index edab52f218b9..f3f0fd7620bd 100644 --- a/lib/mpl_toolkits/axisartist/axis_artist.py +++ b/lib/mpl_toolkits/axisartist/axis_artist.py @@ -928,14 +928,13 @@ class AxisArtist(martist.Artist): ZORDER=2.5 - # LABELPAD : as property - def _set_labelpad(self, v): - return self.label.set_pad(v) - - def _get_labelpad(self): + @property + def LABELPAD(self): return self.label.get_pad() - LABELPAD = property(_get_labelpad, _set_labelpad) + @LABELPAD.setter + def LABELPAD(self, v): + return self.label.set_pad(v) def __init__(self, axes, helper, diff --git a/lib/mpl_toolkits/axisartist/axislines.py b/lib/mpl_toolkits/axisartist/axislines.py index ce74f05f735a..4c7b1d0306e0 100644 --- a/lib/mpl_toolkits/axisartist/axislines.py +++ b/lib/mpl_toolkits/axisartist/axislines.py @@ -641,11 +641,10 @@ def _init_axis_artists(self, axes=None): axisline.major_ticklabels.set_visible(False) axisline.minor_ticklabels.set_visible(False) - def _get_axislines(self): + @property + def axis(self): return self._axislines - axis = property(_get_axislines) - def new_gridlines(self, grid_helper=None): """ Create and return a new GridlineCollection instance. From 51e54340047ede4f086a3b50cbe85ba35418a31d Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Wed, 30 Nov 2016 23:47:18 -0500 Subject: [PATCH 02/16] Simplify FormatterDMS/FormatterHMS tick strings. It doesn't really make sense to put the fractional part of the value _after_ the symbol. Plus, there's a bug with non-LaTeX usage because \mkern is not recognized with mathtext. --- lib/mpl_toolkits/axisartist/angle_helper.py | 36 +++++++++------------ 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/lib/mpl_toolkits/axisartist/angle_helper.py b/lib/mpl_toolkits/axisartist/angle_helper.py index f947280ee5f7..de7e71e2e4ca 100644 --- a/lib/mpl_toolkits/axisartist/angle_helper.py +++ b/lib/mpl_toolkits/axisartist/angle_helper.py @@ -162,7 +162,6 @@ def select_step360(v1, v2, nv, include_last=True, threshold_factor=3600): threshold_factor=threshold_factor) - class LocatorBase(object): def __init__(self, den, include_last=True): self.den = den @@ -211,25 +210,21 @@ def __call__(self, v1, v2): threshold_factor=1) - class FormatterDMS(object): - deg_mark = "^{\circ}" min_mark = "^{\prime}" sec_mark = "^{\prime\prime}" - fmt_d = "$%d"+deg_mark+"$" - fmt_ds = r"$%d.\!\!"+deg_mark+"%s$" + fmt_d = "$%d" + deg_mark + "$" + fmt_ds = r"$%d.%s" + deg_mark + "$" # %s for signe - fmt_d_m = r"$%s%d"+deg_mark+"\,%02d"+min_mark+"$" - fmt_d_ms = r"$%s%d"+deg_mark+"\,%02d.\mkern-4mu"+min_mark+"%s$" - - - fmt_d_m_partial = "$%s%d"+deg_mark+"\,%02d"+min_mark+"\," - fmt_s_partial = "%02d"+sec_mark+"$" - fmt_ss_partial = "%02d.\!\!"+sec_mark+"%s$" + fmt_d_m = r"$%s%d" + deg_mark + "\,%02d" + min_mark + "$" + fmt_d_ms = r"$%s%d" + deg_mark + "\,%02d.%s" + min_mark + "$" + fmt_d_m_partial = "$%s%d" + deg_mark + "\,%02d" + min_mark + "\," + fmt_s_partial = "%02d" + sec_mark + "$" + fmt_ss_partial = "%02d.%s" + sec_mark + "$" def _get_number_fraction(self, factor): ## check for fractional numbers @@ -320,23 +315,22 @@ def __call__(self, direction, factor, values): else: # factor > 3600. return [r"$%s^{\circ}$" % (str(v),) for v in ss*values] + class FormatterHMS(FormatterDMS): deg_mark = "^\mathrm{h}" min_mark = "^\mathrm{m}" sec_mark = "^\mathrm{s}" - fmt_d = "$%d"+deg_mark+"$" - fmt_ds = r"$%d.\!\!"+deg_mark+"%s$" + fmt_d = "$%d" + deg_mark + "$" + fmt_ds = r"$%d.%s" + deg_mark + "$" # %s for signe - fmt_d_m = r"$%s%d"+deg_mark+"\,%02d"+min_mark+"$" - fmt_d_ms = r"$%s%d"+deg_mark+"\,%02d.\!\!"+min_mark+"%s$" - - - fmt_d_m_partial = "$%s%d"+deg_mark+"\,%02d"+min_mark+"\," - fmt_s_partial = "%02d"+sec_mark+"$" - fmt_ss_partial = "%02d.\!\!"+sec_mark+"%s$" + fmt_d_m = r"$%s%d" + deg_mark + "\,%02d" + min_mark+"$" + fmt_d_ms = r"$%s%d" + deg_mark + "\,%02d.%s" + min_mark+"$" + fmt_d_m_partial = "$%s%d" + deg_mark + "\,%02d" + min_mark + "\," + fmt_s_partial = "%02d" + sec_mark + "$" + fmt_ss_partial = "%02d.%s" + sec_mark + "$" def __call__(self, direction, factor, values): # hour return FormatterDMS.__call__(self, direction, factor, np.asarray(values)/15.) From e50c05941a3968c8d2186d276fb0a8e05af40c23 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Wed, 30 Nov 2016 23:50:10 -0500 Subject: [PATCH 03/16] Fix bug in signs of FormatterDMS/HMS. --- lib/mpl_toolkits/axisartist/angle_helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mpl_toolkits/axisartist/angle_helper.py b/lib/mpl_toolkits/axisartist/angle_helper.py index de7e71e2e4ca..584c81f6ed13 100644 --- a/lib/mpl_toolkits/axisartist/angle_helper.py +++ b/lib/mpl_toolkits/axisartist/angle_helper.py @@ -283,7 +283,7 @@ def __call__(self, direction, factor, values): if ss[-1] == -1: inverse_order = True values = values[::-1] - sings = signs[::-1] + signs = signs[::-1] else: inverse_order = False From 7a64b797c0c31d5fc5aa8bd4d5ff765553deea4e Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Wed, 30 Nov 2016 23:56:30 -0500 Subject: [PATCH 04/16] Make axisartist.angle_helper pseudo-tests real. These do no good sitting here and not running, especially because there are no expected results, so it's up to whoever runs it to check. I'm not even completely sure the results are right, but they seem acceptable. --- lib/mpl_toolkits/axisartist/angle_helper.py | 47 ------- .../tests/test_axisartist_angle_helper.py | 117 ++++++++++++++++++ 2 files changed, 117 insertions(+), 47 deletions(-) create mode 100644 lib/mpl_toolkits/tests/test_axisartist_angle_helper.py diff --git a/lib/mpl_toolkits/axisartist/angle_helper.py b/lib/mpl_toolkits/axisartist/angle_helper.py index 584c81f6ed13..1efea7c45363 100644 --- a/lib/mpl_toolkits/axisartist/angle_helper.py +++ b/lib/mpl_toolkits/axisartist/angle_helper.py @@ -416,50 +416,3 @@ def _adjust_extremes(self, lon_min, lon_max, lat_min, lat_max): lat_max = min(max0, lat_max) return lon_min, lon_max, lat_min, lat_max - - - - - -if __name__ == "__main__": - #test2() - #print select_step360(21.2, 33.3, 5) - #print select_step360(20+21.2/60., 21+33.3/60., 5) - #print select_step360(20.5+21.2/3600., 20.5+33.3/3600., 5) - - # test threshold factor - print(select_step360(20.5+11.2/3600., 20.5+53.3/3600., 5, - threshold_factor=60)) - - print(select_step360(20.5+11.2/3600., 20.5+53.3/3600., 5, - threshold_factor=1)) - - fmt = FormatterDMS() - #print fmt("left", 60, [0, -30, -60]) - print(fmt("left", 600, [12301, 12302, 12303])) - - print(select_step360(20.5+21.2/3600., 20.5+21.4/3600., 5)) - print(fmt("left", 36000, [738210, 738215, 738220])) - print(fmt("left", 360000, [7382120, 7382125, 7382130])) - print(fmt("left", 1., [45, 46, 47])) - print(fmt("left", 10., [452, 453, 454])) - -if 0: - print(select_step360(20+21.2/60., 21+33.3/60., 5)) - print(select_step360(20.5+21.2/3600., 20.5+33.3/3600., 5)) - print(select_step360(20+21.2/60., 20+53.3/60., 5)) - - ### - levs, n, factor = select_step360(20.5+21.2/3600., 20.5+27.25/3600., 5) - levs = levs * 0.1 - fmt = FormatterDMS() - #print fmt("left", 60, [0, -30, -60]) - print(fmt("left", factor, levs)) - - - print(select_step(-180, 180, 10, hour=False)) - print(select_step(-12, 12, 10, hour=True)) - - fmt = FormatterDMS() - #print fmt("left", 60, [0, -30, -60]) - print(fmt("left", 3600, [0, -30, -60])) diff --git a/lib/mpl_toolkits/tests/test_axisartist_angle_helper.py b/lib/mpl_toolkits/tests/test_axisartist_angle_helper.py new file mode 100644 index 000000000000..a16d62f37558 --- /dev/null +++ b/lib/mpl_toolkits/tests/test_axisartist_angle_helper.py @@ -0,0 +1,117 @@ +from __future__ import (absolute_import, division, print_function, + unicode_literals) + +import re + +import numpy as np +import pytest + +from mpl_toolkits.axisartist.angle_helper import ( + FormatterDMS, select_step, select_step360) + + +DMS_RE = re.compile( + r'''\$ # Mathtext + ( + # The sign sometimes appears on a 0 when a fraction is shown. + # Check later that there's only one. + (?P-)? + (?P[0-9.]+) # Degrees value + \^{\\circ} # Degree symbol + )? + ( + (?(degree)\\,) # Separator if degrees are also visible. + (?P-)? + (?P[0-9.]+) # Minutes value + \^{\\prime} # Minute symbol + )? + ( + (?(minute)\\,) # Separator if minutes are also visible. + (?P-)? + (?P[0-9.]+) # Seconds value + \^{\\prime\\prime} # Second symbol + )? + \$ # Mathtext + ''', + re.VERBOSE +) + + +def dms2float(degrees, minutes=0, seconds=0): + return degrees + minutes / 60.0 + seconds / 3600.0 + + +@pytest.mark.parametrize('args, kwargs, expected_levels, expected_factor', [ + ((-180, 180, 10), {'hour': False}, np.arange(-180, 181, 30), 1.0), + ((-12, 12, 10), {'hour': True}, np.arange(-12, 13, 2), 1.0) +]) +def test_select_step(args, kwargs, expected_levels, expected_factor): + levels, n, factor = select_step(*args, **kwargs) + + assert n == len(levels) + np.testing.assert_array_equal(levels, expected_levels) + assert factor == expected_factor + + +@pytest.mark.parametrize('args, kwargs, expected_levels, expected_factor', [ + ((dms2float(20, 21.2), dms2float(21, 33.3), 5), {}, + np.arange(1215, 1306, 15), 60.0), + ((dms2float(20.5, seconds=21.2), dms2float(20.5, seconds=33.3), 5), {}, + np.arange(73820, 73835, 2), 3600.0), + ((dms2float(20, 21.2), dms2float(20, 53.3), 5), {}, + np.arange(1220, 1256, 5), 60.0), + ((21.2, 33.3, 5), {}, + np.arange(20, 35, 2), 1.0), + ((dms2float(20, 21.2), dms2float(21, 33.3), 5), {}, + np.arange(1215, 1306, 15), 60.0), + ((dms2float(20.5, seconds=21.2), dms2float(20.5, seconds=33.3), 5), {}, + np.arange(73820, 73835, 2), 3600.0), + ((dms2float(20.5, seconds=21.2), dms2float(20.5, seconds=21.4), 5), {}, + np.arange(7382120, 7382141, 5), 360000.0), + # test threshold factor + ((dms2float(20.5, seconds=11.2), dms2float(20.5, seconds=53.3), 5), + {'threshold_factor': 60}, np.arange(12301, 12310), 600.0), + ((dms2float(20.5, seconds=11.2), dms2float(20.5, seconds=53.3), 5), + {'threshold_factor': 1}, np.arange(20502, 20517, 2), 1000.0), +]) +def test_select_step360(args, kwargs, expected_levels, expected_factor): + levels, n, factor = select_step360(*args, **kwargs) + + assert n == len(levels) + np.testing.assert_array_equal(levels, expected_levels) + assert factor == expected_factor + + +@pytest.mark.parametrize('direction, factor, values', [ + ("left", 60, [0, -30, -60]), + ("left", 600, [12301, 12302, 12303]), + ("left", 3600, [0, -30, -60]), + ("left", 36000, [738210, 738215, 738220]), + ("left", 360000, [7382120, 7382125, 7382130]), + ("left", 1., [45, 46, 47]), + ("left", 10., [452, 453, 454]), +]) +def test_formatters(direction, factor, values): + fmt = FormatterDMS() + result = fmt(direction, factor, values) + + prev_degree = prev_minute = prev_second = None + for tick, value in zip(result, values): + m = DMS_RE.match(tick) + assert m is not None, '"%s" is not an expected tick format.' % (tick, ) + + sign = sum(m.group(sign + '_sign') is not None + for sign in ('degree', 'minute', 'second')) + assert sign <= 1, \ + 'Only one element of tick "%s" may have a sign.' % (tick, ) + sign = 1 if sign == 0 else -1 + + degree = float(m.group('degree') or prev_degree or 0) + minute = float(m.group('minute') or prev_minute or 0) + second = float(m.group('second') or prev_second or 0) + assert sign * dms2float(degree, minute, second) == value / factor, \ + '"%s" does not match expected tick value.' % (tick, ) + + prev_degree = degree + prev_minute = minute + prev_second = second From 15fb901f30b1fcf18d3b084609350362266be769 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 1 Dec 2016 01:14:48 -0500 Subject: [PATCH 05/16] Add sign when FormatterDMS emits only seconds. --- lib/mpl_toolkits/axisartist/angle_helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mpl_toolkits/axisartist/angle_helper.py b/lib/mpl_toolkits/axisartist/angle_helper.py index 1efea7c45363..fe4f446bb113 100644 --- a/lib/mpl_toolkits/axisartist/angle_helper.py +++ b/lib/mpl_toolkits/axisartist/angle_helper.py @@ -304,7 +304,7 @@ def __call__(self, direction, factor, values): l_hm_old = l_hm l = l_hm + s1 #l_s else: - l = "$"+s1 #l_s + l = "$" + s + s1 r.append(l) if inverse_order: From f46776827bfec0fc03e744d2c4f65e93aeeb7768 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 1 Dec 2016 01:23:24 -0500 Subject: [PATCH 06/16] Also test FormatterHMS and select_step24. --- .../tests/test_axisartist_angle_helper.py | 50 +++++++++++++++---- 1 file changed, 39 insertions(+), 11 deletions(-) diff --git a/lib/mpl_toolkits/tests/test_axisartist_angle_helper.py b/lib/mpl_toolkits/tests/test_axisartist_angle_helper.py index a16d62f37558..e0373bb6f926 100644 --- a/lib/mpl_toolkits/tests/test_axisartist_angle_helper.py +++ b/lib/mpl_toolkits/tests/test_axisartist_angle_helper.py @@ -7,34 +7,41 @@ import pytest from mpl_toolkits.axisartist.angle_helper import ( - FormatterDMS, select_step, select_step360) + FormatterDMS, FormatterHMS, select_step, select_step24, select_step360) -DMS_RE = re.compile( +_MS_RE = ( r'''\$ # Mathtext ( # The sign sometimes appears on a 0 when a fraction is shown. # Check later that there's only one. (?P-)? (?P[0-9.]+) # Degrees value - \^{\\circ} # Degree symbol + {degree} # Degree symbol (to be replaced by format.) )? ( (?(degree)\\,) # Separator if degrees are also visible. (?P-)? (?P[0-9.]+) # Minutes value - \^{\\prime} # Minute symbol + {minute} # Minute symbol (to be replaced by format.) )? ( (?(minute)\\,) # Separator if minutes are also visible. (?P-)? (?P[0-9.]+) # Seconds value - \^{\\prime\\prime} # Second symbol + {second} # Second symbol (to be replaced by format.) )? \$ # Mathtext - ''', - re.VERBOSE + ''' ) +DMS_RE = re.compile(_MS_RE.format(degree=re.escape(FormatterDMS.deg_mark), + minute=re.escape(FormatterDMS.min_mark), + second=re.escape(FormatterDMS.sec_mark)), + re.VERBOSE) +HMS_RE = re.compile(_MS_RE.format(degree=re.escape(FormatterHMS.deg_mark), + minute=re.escape(FormatterHMS.min_mark), + second=re.escape(FormatterHMS.sec_mark)), + re.VERBOSE) def dms2float(degrees, minutes=0, seconds=0): @@ -53,6 +60,18 @@ def test_select_step(args, kwargs, expected_levels, expected_factor): assert factor == expected_factor +@pytest.mark.parametrize('args, kwargs, expected_levels, expected_factor', [ + ((-180, 180, 10), {}, np.arange(-180, 181, 30), 1.0), + ((-12, 12, 10), {}, np.arange(-750, 751, 150), 60.0) +]) +def test_select_step24(args, kwargs, expected_levels, expected_factor): + levels, n, factor = select_step24(*args, **kwargs) + + assert n == len(levels) + np.testing.assert_array_equal(levels, expected_levels) + assert factor == expected_factor + + @pytest.mark.parametrize('args, kwargs, expected_levels, expected_factor', [ ((dms2float(20, 21.2), dms2float(21, 33.3), 5), {}, np.arange(1215, 1306, 15), 60.0), @@ -82,6 +101,10 @@ def test_select_step360(args, kwargs, expected_levels, expected_factor): assert factor == expected_factor +@pytest.mark.parametrize('Formatter, regex', + [(FormatterDMS, DMS_RE), + (FormatterHMS, HMS_RE)], + ids=['Degree/Minute/Second', 'Hour/Minute/Second']) @pytest.mark.parametrize('direction, factor, values', [ ("left", 60, [0, -30, -60]), ("left", 600, [12301, 12302, 12303]), @@ -91,13 +114,13 @@ def test_select_step360(args, kwargs, expected_levels, expected_factor): ("left", 1., [45, 46, 47]), ("left", 10., [452, 453, 454]), ]) -def test_formatters(direction, factor, values): - fmt = FormatterDMS() +def test_formatters(Formatter, regex, direction, factor, values): + fmt = Formatter() result = fmt(direction, factor, values) prev_degree = prev_minute = prev_second = None for tick, value in zip(result, values): - m = DMS_RE.match(tick) + m = regex.match(tick) assert m is not None, '"%s" is not an expected tick format.' % (tick, ) sign = sum(m.group(sign + '_sign') is not None @@ -109,7 +132,12 @@ def test_formatters(direction, factor, values): degree = float(m.group('degree') or prev_degree or 0) minute = float(m.group('minute') or prev_minute or 0) second = float(m.group('second') or prev_second or 0) - assert sign * dms2float(degree, minute, second) == value / factor, \ + if Formatter == FormatterHMS: + # 360 degrees as plot range -> 24 hours as labelled range + expected_value = pytest.approx((value // 15) / factor) + else: + expected_value = pytest.approx(value / factor) + assert sign * dms2float(degree, minute, second) == expected_value, \ '"%s" does not match expected tick value.' % (tick, ) prev_degree = degree From bc1bfab12150feaad88f0944dc1cda977452f577 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 1 Dec 2016 03:17:14 -0500 Subject: [PATCH 07/16] Make axisartist.clip_path pseudo-tests real. The results seem to be acceptable. --- lib/mpl_toolkits/axisartist/clip_path.py | 26 ------------ .../test_axisartist_clip_path/clip_path.png | Bin 0 -> 25701 bytes .../tests/test_axisartist_clip_path.py | 38 ++++++++++++++++++ 3 files changed, 38 insertions(+), 26 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_clip_path/clip_path.png create mode 100644 lib/mpl_toolkits/tests/test_axisartist_clip_path.py diff --git a/lib/mpl_toolkits/axisartist/clip_path.py b/lib/mpl_toolkits/axisartist/clip_path.py index ae62f1c1eca0..8507b09b0750 100644 --- a/lib/mpl_toolkits/axisartist/clip_path.py +++ b/lib/mpl_toolkits/axisartist/clip_path.py @@ -133,29 +133,3 @@ def clip_line_to_rect(xline, yline, bbox): if bbox.containsx(x)] return list(zip(lx4, ly4)), [c_left, c_bottom, c_right, c_top] - - -if __name__ == "__main__": - - import matplotlib.pyplot as plt - - x = np.array([-3, -2, -1, 0., 1, 2, 3, 2, 1, 0, -1, -2, -3, 5]) - #x = np.array([-3, -2, -1, 0., 1, 2, 3]) - y = np.arange(len(x)) - #x0 = 2 - - plt.plot(x, y, lw=1) - - from matplotlib.transforms import Bbox - bb = Bbox.from_extents(-2, 3, 2, 12.5) - lxy, ticks = clip_line_to_rect(x, y, bb) - for xx, yy in lxy: - plt.plot(xx, yy, lw=1, color="g") - - ccc = iter(["ro", "go", "rx", "bx"]) - for ttt in ticks: - cc = next(ccc) - for (xx, yy), aa in ttt: - plt.plot([xx], [yy], cc) - - #xlim( diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_clip_path/clip_path.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_clip_path/clip_path.png new file mode 100644 index 0000000000000000000000000000000000000000..1f296b6d06d54940a25298cad1eb401f0579a124 GIT binary patch literal 25701 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 Date: Thu, 1 Dec 2016 16:51:53 -0500 Subject: [PATCH 08/16] Fix axisartist.floating_axes error with new NumPy. It raises "TypeError: Cannot cast ufunc subtract output from dtype('float64') to dtype('int64') with casting rule 'same_kind'" due to in-place subtraction. --- lib/mpl_toolkits/axisartist/floating_axes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/mpl_toolkits/axisartist/floating_axes.py b/lib/mpl_toolkits/axisartist/floating_axes.py index 2e9133b877b5..2052330d04c7 100644 --- a/lib/mpl_toolkits/axisartist/floating_axes.py +++ b/lib/mpl_toolkits/axisartist/floating_axes.py @@ -137,12 +137,12 @@ def transform_xy(x, y): xx1, yy1 = transform_xy(xx0, yy0) - xx00 = xx0.copy() + xx00 = xx0.astype(float, copy=True) xx00[xx0+dx>xmax] -= dx xx1a, yy1a = transform_xy(xx00, yy0) xx1b, yy1b = transform_xy(xx00+dx, yy0) - yy00 = yy0.copy() + yy00 = yy0.astype(float, copy=True) yy00[yy0+dy>ymax] -= dy xx2a, yy2a = transform_xy(xx0, yy00) xx2b, yy2b = transform_xy(xx0, yy00+dy) @@ -158,12 +158,12 @@ def transform_xy(x, y): xx1, yy1 = transform_xy(xx0, yy0) - yy00 = yy0.copy() + yy00 = yy0.astype(float, copy=True) yy00[yy0+dy>ymax] -= dy xx1a, yy1a = transform_xy(xx0, yy00) xx1b, yy1b = transform_xy(xx0, yy00+dy) - xx00 = xx0.copy() + xx00 = xx0.astype(float, copy=True) xx00[xx0+dx>xmax] -= dx xx2a, yy2a = transform_xy(xx00, yy0) xx2b, yy2b = transform_xy(xx00+dx, yy0) From ffb54613eacf85d1bffb26818e4331d1c22e312d Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 23 Mar 2017 20:38:26 -0400 Subject: [PATCH 09/16] Don't double-strike axis artist Ticks. --- lib/mpl_toolkits/axisartist/axis_artist.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/mpl_toolkits/axisartist/axis_artist.py b/lib/mpl_toolkits/axisartist/axis_artist.py index f3f0fd7620bd..c4a89684d720 100644 --- a/lib/mpl_toolkits/axisartist/axis_artist.py +++ b/lib/mpl_toolkits/axisartist/axis_artist.py @@ -328,7 +328,7 @@ def draw(self, renderer): for loc, angle in self.locs_angles: marker_rotation.rotate_deg(angle+add_angle) - locs = path_trans.transform_non_affine(np.array([loc, loc])) + locs = path_trans.transform_non_affine([loc]) renderer.draw_markers(gc, self._tickvert_path, marker_transform, Path(locs), path_trans.get_affine()) marker_rotation.clear() From 7ecf80ff6f49b98129c6cb173cbacef6c34fa163 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 23 Mar 2017 21:44:15 -0400 Subject: [PATCH 10/16] Fix clipping of axis artist Ticks. Instead of clipping the entire path+marker to the gc's clip path (which is inside the Axes only), clip the *position* of the path (aka marker). They then stay within the Axes, but don't get clipped if outgoing. --- lib/mpl_toolkits/axisartist/axis_artist.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/mpl_toolkits/axisartist/axis_artist.py b/lib/mpl_toolkits/axisartist/axis_artist.py index c4a89684d720..d1a11fc2601e 100644 --- a/lib/mpl_toolkits/axisartist/axis_artist.py +++ b/lib/mpl_toolkits/axisartist/axis_artist.py @@ -310,7 +310,6 @@ def draw(self, renderer): gc = renderer.new_gc() - self._set_gc_clip(gc) gc.set_foreground(self.get_markeredgecolor()) gc.set_linewidth(self.get_markeredgewidth()) gc.set_alpha(self._alpha) @@ -327,11 +326,13 @@ def draw(self, renderer): marker_transform = marker_scale + marker_rotation for loc, angle in self.locs_angles: - marker_rotation.rotate_deg(angle+add_angle) + marker_rotation.clear().rotate_deg(angle+add_angle) locs = path_trans.transform_non_affine([loc]) + if (self.axes and + not self.axes.viewLim.contains(locs[0][0], locs[0][1])): + continue renderer.draw_markers(gc, self._tickvert_path, marker_transform, Path(locs), path_trans.get_affine()) - marker_rotation.clear() gc.restore() From bf25cf61ee57769bd69d9ced00b6fdb0922d127d Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 23 Mar 2017 20:39:55 -0400 Subject: [PATCH 11/16] Make axisartist.axislines pseudo-tests real. The results seem to be acceptable. --- lib/mpl_toolkits/axisartist/axislines.py | 45 ------------------ .../test_axisartist_axislines/Subplot.png | Bin 0 -> 26976 bytes .../test_axisartist_axislines/SubplotZero.png | Bin 0 -> 28498 bytes .../tests/test_axisartist_axislines.py | 45 ++++++++++++++++++ 4 files changed, 45 insertions(+), 45 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_axislines/Subplot.png create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_axislines/SubplotZero.png create mode 100644 lib/mpl_toolkits/tests/test_axisartist_axislines.py diff --git a/lib/mpl_toolkits/axisartist/axislines.py b/lib/mpl_toolkits/axisartist/axislines.py index 4c7b1d0306e0..6182608cc5ba 100644 --- a/lib/mpl_toolkits/axisartist/axislines.py +++ b/lib/mpl_toolkits/axisartist/axislines.py @@ -826,48 +826,3 @@ def _init_axis_artists(self): self._axislines["yzero"] = yaxis_zero SubplotZero = maxes.subplot_class_factory(AxesZero) - - -if 0: -#if __name__ == "__main__": - import matplotlib.pyplot as plt - - fig = plt.figure(1, (4,3)) - - ax = SubplotZero(fig, 1, 1, 1) - fig.add_subplot(ax) - - ax.axis["xzero"].set_visible(True) - ax.axis["xzero"].label.set_text("Axis Zero") - - for n in ["top", "right"]: - ax.axis[n].set_visible(False) - - xx = np.arange(0, 2*np.pi, 0.01) - ax.plot(xx, np.sin(xx)) - ax.set_ylabel("Test") - plt.draw() - plt.show() - - -if __name__ == "__main__": -#if 1: - import matplotlib.pyplot as plt - - fig = plt.figure(1, (4,3)) - - ax = Subplot(fig, 1, 1, 1) - fig.add_subplot(ax) - - xx = np.arange(0, 2*np.pi, 0.01) - ax.plot(xx, np.sin(xx)) - ax.set_ylabel("Test") - - ax.axis["top"].major_ticks.set_tick_out(True) #set_tick_direction("out") - ax.axis["bottom"].major_ticks.set_tick_out(True) #set_tick_direction("out") - #ax.axis["bottom"].set_tick_direction("in") - - ax.axis["bottom"].set_label("Tk0") - - plt.draw() - plt.show() diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_axislines/Subplot.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_axislines/Subplot.png new file mode 100644 index 0000000000000000000000000000000000000000..0db52526e91e0c5fed26db30abc640b716760fec GIT binary patch literal 26976 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/test_axisartist_axislines.py b/lib/mpl_toolkits/tests/test_axisartist_axislines.py new file mode 100644 index 000000000000..de60672822cc --- /dev/null +++ b/lib/mpl_toolkits/tests/test_axisartist_axislines.py @@ -0,0 +1,45 @@ +from __future__ import (absolute_import, division, print_function, + unicode_literals) + +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.testing.decorators import image_comparison + +from mpl_toolkits.axisartist.axislines import SubplotZero, Subplot + + +@image_comparison(baseline_images=['SubplotZero'], + extensions=['png'], style='default') +def test_SubplotZero(): + fig = plt.figure() + + ax = SubplotZero(fig, 1, 1, 1) + fig.add_subplot(ax) + + ax.axis["xzero"].set_visible(True) + ax.axis["xzero"].label.set_text("Axis Zero") + + for n in ["top", "right"]: + ax.axis[n].set_visible(False) + + xx = np.arange(0, 2 * np.pi, 0.01) + ax.plot(xx, np.sin(xx)) + ax.set_ylabel("Test") + + +@image_comparison(baseline_images=['Subplot'], + extensions=['png'], style='default') +def test_Subplot(): + fig = plt.figure() + + ax = Subplot(fig, 1, 1, 1) + fig.add_subplot(ax) + + xx = np.arange(0, 2 * np.pi, 0.01) + ax.plot(xx, np.sin(xx)) + ax.set_ylabel("Test") + + ax.axis["top"].major_ticks.set_tick_out(True) + ax.axis["bottom"].major_ticks.set_tick_out(True) + + ax.axis["bottom"].set_label("Tk0") From e0556d17b85e9b9d5139bf8aef301e3dedbe18ae Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 23 Mar 2017 21:02:51 -0400 Subject: [PATCH 12/16] Make axisartist.grid_helper_curvelinear pseudo-tests real. The results seem to be acceptable, though the tick direction of the axis appears to be broken. --- .../axisartist/grid_helper_curvelinear.py | 298 ------------------ .../axis_direction.png | Bin 0 -> 40235 bytes .../custom_transform.png | Bin 0 -> 14608 bytes .../polar_box.png | Bin 0 -> 62851 bytes ...test_axisartist_grid_helper_curvelinear.py | 219 +++++++++++++ 5 files changed, 219 insertions(+), 298 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/axis_direction.png create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/custom_transform.png create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/polar_box.png create mode 100644 lib/mpl_toolkits/tests/test_axisartist_grid_helper_curvelinear.py diff --git a/lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py b/lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py index d2327a559def..578645148eeb 100644 --- a/lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py +++ b/lib/mpl_toolkits/axisartist/grid_helper_curvelinear.py @@ -473,301 +473,3 @@ def f(): # yield xy, a, "" return f() - - - -def test3(): - - import numpy as np - from matplotlib.transforms import Transform - from matplotlib.path import Path - - class MyTransform(Transform): - input_dims = 2 - output_dims = 2 - is_separable = False - - def __init__(self, resolution): - """ - Create a new Aitoff transform. Resolution is the number of steps - to interpolate between each input line segment to approximate its - path in curved Aitoff space. - """ - Transform.__init__(self) - self._resolution = resolution - - def transform(self, ll): - x = ll[:, 0:1] - y = ll[:, 1:2] - - return np.concatenate((x, y-x), 1) - - transform.__doc__ = Transform.transform.__doc__ - - transform_non_affine = transform - transform_non_affine.__doc__ = Transform.transform_non_affine.__doc__ - - def transform_path(self, path): - vertices = path.vertices - ipath = path.interpolated(self._resolution) - return Path(self.transform(ipath.vertices), ipath.codes) - transform_path.__doc__ = Transform.transform_path.__doc__ - - transform_path_non_affine = transform_path - transform_path_non_affine.__doc__ = Transform.transform_path_non_affine.__doc__ - - def inverted(self): - return MyTransformInv(self._resolution) - inverted.__doc__ = Transform.inverted.__doc__ - - class MyTransformInv(Transform): - input_dims = 2 - output_dims = 2 - is_separable = False - - def __init__(self, resolution): - Transform.__init__(self) - self._resolution = resolution - - def transform(self, ll): - x = ll[:, 0:1] - y = ll[:, 1:2] - - return np.concatenate((x, y+x), 1) - transform.__doc__ = Transform.transform.__doc__ - - def inverted(self): - return MyTransform(self._resolution) - inverted.__doc__ = Transform.inverted.__doc__ - - - - import matplotlib.pyplot as plt - fig = plt.figure(1) - fig.clf() - tr = MyTransform(1) - grid_helper = GridHelperCurveLinear(tr) - - - from mpl_toolkits.axes_grid1.parasite_axes import host_subplot_class_factory - from .axislines import Axes - - SubplotHost = host_subplot_class_factory(Axes) - - ax1 = SubplotHost(fig, 1, 1, 1, grid_helper=grid_helper) - - fig.add_subplot(ax1) - - ax2 = ParasiteAxesAuxTrans(ax1, tr, "equal") - ax1.parasites.append(ax2) - ax2.plot([3, 6], [5.0, 10.]) - - ax1.set_aspect(1.) - ax1.set_xlim(0, 10) - ax1.set_ylim(0, 10) - - ax1.grid(True) - plt.draw() - - - -def curvelinear_test2(fig): - """ - polar projection, but in a rectangular box. - """ - global ax1 - import numpy as np - from . import angle_helper - from matplotlib.projections import PolarAxes - from matplotlib.transforms import Affine2D - - from mpl_toolkits.axes_grid.parasite_axes import SubplotHost, \ - ParasiteAxesAuxTrans - import matplotlib.cbook as cbook - - # PolarAxes.PolarTransform takes radian. However, we want our coordinate - # system in degree - tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() - - # polar projection, which involves cycle, and also has limits in - # its coordinates, needs a special method to find the extremes - # (min, max of the coordinate within the view). - - # 20, 20 : number of sampling points along x, y direction - extreme_finder = angle_helper.ExtremeFinderCycle(20, 20, - lon_cycle = 360, - lat_cycle = None, - lon_minmax = None, - lat_minmax = (0, np.inf), - ) - - grid_locator1 = angle_helper.LocatorDMS(5) - # Find a grid values appropriate for the coordinate (degree, - # minute, second). - - tick_formatter1 = angle_helper.FormatterDMS() - # And also uses an appropriate formatter. Note that,the - # acceptable Locator and Formatter class is a bit different than - # that of mpl's, and you cannot directly use mpl's Locator and - # Formatter here (but may be possible in the future). - - grid_helper = GridHelperCurveLinear(tr, - extreme_finder=extreme_finder, - grid_locator1=grid_locator1, - tick_formatter1=tick_formatter1 - ) - - - ax1 = SubplotHost(fig, 1, 1, 1, grid_helper=grid_helper) - - # make ticklabels of right and top axis visible. - ax1.axis["right"].major_ticklabels.set_visible(True) - ax1.axis["top"].major_ticklabels.set_visible(True) - - # let right axis shows ticklabels for 1st coordinate (angle) - ax1.axis["right"].get_helper().nth_coord_ticks=0 - # let bottom axis shows ticklabels for 2nd coordinate (radius) - ax1.axis["bottom"].get_helper().nth_coord_ticks=1 - - fig.add_subplot(ax1) - - grid_helper = ax1.get_grid_helper() - ax1.axis["lat"] = axis = grid_helper.new_floating_axis(0, 60, axes=ax1) - axis.label.set_text("Test") - axis.label.set_visible(True) - #axis._extremes = 2, 10 - #axis.label.set_text("Test") - #axis.major_ticklabels.set_visible(False) - #axis.major_ticks.set_visible(False) - axis.get_helper()._extremes=2, 10 - - ax1.axis["lon"] = axis = grid_helper.new_floating_axis(1, 6, axes=ax1) - #axis.major_ticklabels.set_visible(False) - #axis.major_ticks.set_visible(False) - axis.label.set_text("Test 2") - axis.get_helper()._extremes=-180, 90 - - # A parasite axes with given transform - ax2 = ParasiteAxesAuxTrans(ax1, tr, "equal") - # note that ax2.transData == tr + ax1.transData - # Anthing you draw in ax2 will match the ticks and grids of ax1. - ax1.parasites.append(ax2) - intp = cbook.simple_linear_interpolation - ax2.plot(intp(np.array([0, 30]), 50), - intp(np.array([10., 10.]), 50)) - - ax1.set_aspect(1.) - ax1.set_xlim(-5, 12) - ax1.set_ylim(-5, 10) - - ax1.grid(True) - - -def curvelinear_test3(fig): - """ - polar projection, but in a rectangular box. - """ - global ax1, axis - import numpy as np - from . import angle_helper - from matplotlib.projections import PolarAxes - from matplotlib.transforms import Affine2D - - from mpl_toolkits.axes_grid.parasite_axes import SubplotHost - - # PolarAxes.PolarTransform takes radian. However, we want our coordinate - # system in degree - tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() - - # polar projection, which involves cycle, and also has limits in - # its coordinates, needs a special method to find the extremes - # (min, max of the coordinate within the view). - - # 20, 20 : number of sampling points along x, y direction - extreme_finder = angle_helper.ExtremeFinderCycle(20, 20, - lon_cycle = 360, - lat_cycle = None, - lon_minmax = None, - lat_minmax = (0, np.inf), - ) - - grid_locator1 = angle_helper.LocatorDMS(12) - # Find a grid values appropriate for the coordinate (degree, - # minute, second). - - tick_formatter1 = angle_helper.FormatterDMS() - # And also uses an appropriate formatter. Note that,the - # acceptable Locator and Formatter class is a bit different than - # that of mpl's, and you cannot directly use mpl's Locator and - # Formatter here (but may be possible in the future). - - grid_helper = GridHelperCurveLinear(tr, - extreme_finder=extreme_finder, - grid_locator1=grid_locator1, - tick_formatter1=tick_formatter1 - ) - - - ax1 = SubplotHost(fig, 1, 1, 1, grid_helper=grid_helper) - - for axis in list(six.itervalues(ax1.axis)): - axis.set_visible(False) - - fig.add_subplot(ax1) - - grid_helper = ax1.get_grid_helper() - ax1.axis["lat1"] = axis = grid_helper.new_floating_axis(0, 130, - axes=ax1, - axis_direction="left" - ) - axis.label.set_text("Test") - axis.label.set_visible(True) - axis.get_helper()._extremes=0.001, 10 - - - - grid_helper = ax1.get_grid_helper() - ax1.axis["lat2"] = axis = grid_helper.new_floating_axis(0, 50, axes=ax1, - axis_direction="right") - axis.label.set_text("Test") - axis.label.set_visible(True) - axis.get_helper()._extremes=0.001, 10 - - ax1.axis["lon"] = axis = grid_helper.new_floating_axis(1, 10, - axes=ax1, - axis_direction="bottom") - axis.label.set_text("Test 2") - axis.get_helper()._extremes= 50, 130 - axis.major_ticklabels.set_axis_direction("top") - axis.label.set_axis_direction("top") - - grid_helper.grid_finder.grid_locator1.den = 5 - grid_helper.grid_finder.grid_locator2._nbins = 5 - - -# # A parasite axes with given transform -# ax2 = ParasiteAxesAuxTrans(ax1, tr, "equal") -# # note that ax2.transData == tr + ax1.transData -# # Anthing you draw in ax2 will match the ticks and grids of ax1. -# ax1.parasites.append(ax2) -# intp = cbook.simple_linear_interpolation -# ax2.plot(intp(np.array([0, 30]), 50), -# intp(np.array([10., 10.]), 50)) - - ax1.set_aspect(1.) - ax1.set_xlim(-5, 12) - ax1.set_ylim(-5, 10) - - ax1.grid(True) - -if __name__ == "__main__": - import matplotlib.pyplot as plt - fig = plt.figure(1, figsize=(5, 5)) - fig.clf() - - #test3() - #curvelinear_test2(fig) - curvelinear_test3(fig) - - #plt.draw() - plt.show() diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/axis_direction.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/axis_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..20483d07184d301eb4ddf2f76ab685511f4ad44a GIT binary patch literal 40235 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/custom_transform.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/custom_transform.png new file mode 100644 index 0000000000000000000000000000000000000000..e32459eed747ad0d4540870dae345cbfbbfe4a68 GIT binary patch literal 14608 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/polar_box.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_grid_helper_curvelinear/polar_box.png new file mode 100644 index 0000000000000000000000000000000000000000..8121ee0817956c58a1f8956659c4cc7e38ef1781 GIT binary patch literal 62851 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%0D_xiCaxiPk&#e8kQR&P_jcl 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
9F#2((VX``8(kMI} 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 aQ))+#*ch8zdW91FZ=Qki?5lcKyZ#rm Date: Fri, 24 Mar 2017 01:53:02 -0400 Subject: [PATCH 13/16] Make axisartist.floating_axes pseudo-tests real. The results seem to be acceptable. --- lib/mpl_toolkits/axisartist/floating_axes.py | 176 ------------------ .../curvelinear3.png | Bin 0 -> 52324 bytes .../curvelinear4.png | Bin 0 -> 28816 bytes .../tests/test_axisartist_floating_axes.py | 126 +++++++++++++ 4 files changed, 126 insertions(+), 176 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_floating_axes/curvelinear3.png create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_floating_axes/curvelinear4.png create mode 100644 lib/mpl_toolkits/tests/test_axisartist_floating_axes.py diff --git a/lib/mpl_toolkits/axisartist/floating_axes.py b/lib/mpl_toolkits/axisartist/floating_axes.py index 2052330d04c7..bc67c7c42969 100644 --- a/lib/mpl_toolkits/axisartist/floating_axes.py +++ b/lib/mpl_toolkits/axisartist/floating_axes.py @@ -542,179 +542,3 @@ def floatingaxes_class_factory(axes_class): import matplotlib.axes as maxes FloatingSubplot = maxes.subplot_class_factory(FloatingAxes) - -# def test(fig): -# from mpl_toolkits.axes_grid.axislines import Subplot -# ax = Subplot(fig, 111) - -# fig.add_subplot(ax) - -# plt.draw() - - -def curvelinear_test3(fig): - """ - polar projection, but in a rectangular box. - """ - global ax1, axis - import numpy as np - from . import angle_helper - from matplotlib.projections import PolarAxes - - # PolarAxes.PolarTransform takes radian. However, we want our coordinate - # system in degree - tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() - - # polar projection, which involves cycle, and also has limits in - # its coordinates, needs a special method to find the extremes - # (min, max of the coordinate within the view). - - - grid_locator1 = angle_helper.LocatorDMS(15) - # Find a grid values appropriate for the coordinate (degree, - # minute, second). - - tick_formatter1 = angle_helper.FormatterDMS() - # And also uses an appropriate formatter. Note that,the - # acceptable Locator and Formatter class is a bit different than - # that of mpl's, and you cannot directly use mpl's Locator and - # Formatter here (but may be possible in the future). - - from .grid_finder import FixedLocator - grid_locator2 = FixedLocator([2, 4, 6, 8, 10]) - - - grid_helper = GridHelperCurveLinear(tr, - extremes=(0, 360, 10, 3), - grid_locator1=grid_locator1, - grid_locator2=grid_locator2, - tick_formatter1=tick_formatter1, - tick_formatter2=None, - ) - - ax1 = FloatingSubplot(fig, 111, grid_helper=grid_helper) - - - #ax1.axis["top"].set_visible(False) - #ax1.axis["bottom"].major_ticklabels.set_axis_direction("top") - - fig.add_subplot(ax1) - - - #ax1.grid(True) - - - r_scale = 10. - tr2 = Affine2D().scale(1., 1./r_scale) + tr - grid_locator2 = FixedLocator([30, 60, 90]) - grid_helper2 = GridHelperCurveLinear(tr2, - extremes=(0, 360, - 10.*r_scale, 3.*r_scale), - grid_locator2=grid_locator2, - ) - - ax1.axis["right"] = axis = grid_helper2.new_fixed_axis("right", axes=ax1) - - ax1.axis["left"].label.set_text("Test 1") - ax1.axis["right"].label.set_text("Test 2") - - - for an in [ "left", "right"]: - ax1.axis[an].set_visible(False) - - - #grid_helper2 = ax1.get_grid_helper() - ax1.axis["z"] = axis = grid_helper.new_floating_axis(1, 7, - axes=ax1, - axis_direction="bottom") - axis.toggle(all=True, label=True) - #axis.label.set_axis_direction("top") - axis.label.set_text("z = ?") - axis.label.set_visible(True) - axis.line.set_color("0.5") - #axis.label.set_visible(True) - - - ax2 = ax1.get_aux_axes(tr) - - xx, yy = [67, 90, 75, 30], [2, 5, 8, 4] - ax2.scatter(xx, yy) - l, = ax2.plot(xx, yy, "k-") - l.set_clip_path(ax1.patch) - - -def curvelinear_test4(fig): - """ - polar projection, but in a rectangular box. - """ - global ax1, axis - import numpy as np - from . import angle_helper - from matplotlib.projections import PolarAxes - - tr = Affine2D().scale(np.pi/180., 1.) + PolarAxes.PolarTransform() - - grid_locator1 = angle_helper.LocatorDMS(5) - tick_formatter1 = angle_helper.FormatterDMS() - - from .grid_finder import FixedLocator - grid_locator2 = FixedLocator([2, 4, 6, 8, 10]) - - grid_helper = GridHelperCurveLinear(tr, - extremes=(120, 30, 10, 0), - grid_locator1=grid_locator1, - grid_locator2=grid_locator2, - tick_formatter1=tick_formatter1, - tick_formatter2=None, - ) - - ax1 = FloatingSubplot(fig, 111, grid_helper=grid_helper) - - - #ax1.axis["top"].set_visible(False) - #ax1.axis["bottom"].major_ticklabels.set_axis_direction("top") - - fig.add_subplot(ax1) - - - #ax1.grid(True) - - - ax1.axis["left"].label.set_text("Test 1") - ax1.axis["right"].label.set_text("Test 2") - - - for an in [ "top"]: - ax1.axis[an].set_visible(False) - - - #grid_helper2 = ax1.get_grid_helper() - ax1.axis["z"] = axis = grid_helper.new_floating_axis(1, 70, - axes=ax1, - axis_direction="bottom") - axis.toggle(all=True, label=True) - axis.label.set_axis_direction("top") - axis.label.set_text("z = ?") - axis.label.set_visible(True) - axis.line.set_color("0.5") - #axis.label.set_visible(True) - - - ax2 = ax1.get_aux_axes(tr) - - xx, yy = [67, 90, 75, 30], [2, 5, 8, 4] - ax2.scatter(xx, yy) - l, = ax2.plot(xx, yy, "k-") - l.set_clip_path(ax1.patch) - -if __name__ == "__main__": - import matplotlib.pyplot as plt - fig = plt.figure(1, figsize=(5, 5)) - fig.clf() - - #test(fig) - #curvelinear_test1(fig) - curvelinear_test4(fig) - - #plt.draw() - plt.show() diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_floating_axes/curvelinear3.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_floating_axes/curvelinear3.png new file mode 100644 index 0000000000000000000000000000000000000000..6832d5dcb4bed5616c2bc967f94abe40666cfc88 GIT binary patch literal 52324 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_floating_axes/curvelinear4.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_floating_axes/curvelinear4.png new file mode 100644 index 0000000000000000000000000000000000000000..169bc1a3dde392f38e8d09e68e126bb31eac2aab GIT binary patch literal 28816 zcmeFZ`9GIk`#pS;nUX1zp-^Ndl__K3{u9dL5{v)O>SMhBI7M+fl0S3>+P6IL#U1_zHvX30 zhy71F`ngg^9sPZdc>5pma9SJS>UZ43``B7#c}4u!$NRYdrmbpQW!#)MIXZ7ubCzA} z?(grTuAuOLe?;Ef&rN}OqUtC`t))!#w_62X9r@yB$NRmTY1}Krb$>7)7oYyhGfw<` zA?8*i2NT&mkCX}TIN}kIB*Jsx-BYP1Za&5kqch9d4f49U%EV(Q@5#3Hj4^Yr33}fZ zak_soe2?4VlO=zdLq=a{{z;6AWl2llN~D za5iIj)V|s|QHiVX|NqPXe-Zw_7YQM|O-xL>9(s!o3=H%Gn-b|Lm&1p1UE3~F5qU-_VhReJIXOAB zkN0n#D_iY6ghORaTbY=C`0tPRdS+%E_wL;*Z@YT!TI!`svG3kl&CJd^{`vOu(edvq zJl_?pbFgT#32F+VCD!O2IU*}0EX*$F)m^^v&6_tA)zHvTT2|JOzayh>csQ=7CS>qy z>jioV*Ti%;JN!VTMPXD$#fco(y?3k`Db0{6j>5u1<6XO&_z#7io|y@}su{$c6~3tU z?M0@zzFm`z+Oz0aJtlb_I{6mc^DS6~4OZ$i#OYhOXIjlo>@zC1_F4*GA)*<3WvlnV zvjqNvJ$X#4WNp^|-=CCD*OkxElh0Td5nyf;v@WA9_567Y_x-xM^i=(a53AUs>F4I= z#;2w}+@1dYd%L~8h=_KWUG9D?2|vHOjDB7R?;H=6EUa->WLt23Qxg++9E09j4z3}! zfu~RPRgQM^7TZ?n1_V3^2uhdU>oe9bDN0;C zZ-CR@luxL}Au*jp-rqXbO4=Ye`0>=ai3qx7eWRmEdNC{3ty@R;^2%0bF2^753h5=~ zf+LxhKbahU+mE%3>ncZq(+Tx--`kHHeVkuh5I`mO{Tjs-2rDB^hdOY(PJjMIl zdw;*&+DlQZTDEWM^j|`CQ3EDf;y3lzaDz;8{**X0D$6`#1IC#j~TI9?)O+RtUvn3Grk(c}g2RLxqFY(yw0Sz^|f~ge*$%9XEGgIlI~GLtl4= zmw=j|#D}8&%ld|l$97#)??*_ryQ|=z=&9PLPE#Wv$%~f9*gJfGbxk#BLc;SyQ5;T7 z%>yk}Re|~Gv6#rnWoMVKvA#R?iaku^fp>3mLnO1FkrA_qh={S7*;71XPKW#Wmy^AY zJ=H60P0Aar z2R=P>Dp{@WFZDQJG@hALB>TX_W0$nUwQMUq8T*EUURIqPTh)D~{NcmqbL;f7Eegj! zdDnSlZ1wIDvM4NXx7U!VTU=86jh&L%umL;8efRENfM@PrCVxwyPU%$HGFLX9s@OT}fuC6YoqQZ;Uc(>~D zwQIt+_ue^+gG(P6l>F}bb2jV+3mY5#_=I&1GMlvjLWO|4il9`wDH4~Mj10SJKKJbG ztofby_-CycjYcECb?IGaXH04;S7KsfdFRiB_ecUtCw^Gr0X>Ws`A1Hi9PQ@w`cSle zw7Wtn>|da&s%m{><1#}-!|pfX|7MgzLqoGW+)IQ1dQwZF>l_kKX)Z43EH)VSylLzw?yf--&&z>8ZrJ=pB~?ZxU*IqjsxM4XDKOP2&jkDKIMkm%pO zeLL+ySoS1?7eNpH8JX0XeEu`G4Se|Mr=}&L1?HZH#hhAzuDswl9J-$ z;>-5$-`~>ON)EA=G~dLZKdD(+oMO6rL`u&aOPn*!Z|~?hot(U4a&j`;T*|@0fzs2{ z!_wAc`}w4;be_fY?a4RgQ&m%Ic>kX7!Gj0+e(n8b&duX*cWXO7iDFd^o|F<37w;(8 zBR)EZ#3U{$$&AQ*TD1Ruwv}{8siWSJPY-r#och(CqsPV1AJdU%l(#!ei>h~hWy95{ z_e*TA`IGRag{?RcXWd?3cSO!Gm*RaC{8xH~s1^r5KmW*=D*pO5`iEs@+g)64OoayL z87BEm|2lYeTga+o$Bt1EZ*T3+v%Iyd<@s}6JZzbJhZxFAy74SxSWHt>2zjOf=kWJ< zzaGkh*@1V`>9^ZmgOoEl{3`9LrjHys!okDCL*DrFXQ6N3zTwD6BFUKT+=*DDv$V7n zSiQQTy?tdAb)#S2ui23A(Y5!<4JI2-n@NF z(o|X+?~VNYb(=TyA-@`%m~8j-ltx86mztWha3;q}`cPX*Uf!~3T{=94&Hnujs2*4Y zJ>-9L9C?!2n3$NJEiNtI-jN~iIQ%9bn|a!{`0T@n52qg7D_P{wH#8h*77c$|duqPD z!fW41Pt6)?B{%n(fYI(8)MeGs8K27QfiY#dP0{u%^!4?#PyGB~E}gEpb!!ZAw5cf@ z3T;`)^s#rh_p;Z7OgAkq%q!t%iVjw-q8tt%K8xcdrmjw2&#zJ_Gc$AMXGxudqvPpS za<;r4y8s5fI`6K-`O8o^WQY=vf)>TEV82#U(x_@$Hlxka#f4$Vjvb@di;*l*<>`>$ z9zA+g|NQxFqYRrcUx-mtJRqSgdEki+ETKaZ7SHg`O5-x6Tk+EyjP06bqIB?+6A$e!9VLgfXXfUdzC1ob*%v8m*;`(}j?ot*bzDeDs6Bi8vU0D^71uOQE`Dw7#VJx!Qd0FDUXuz$aegtS5he*gYW*}t;1_laHD%a}5IZrk{+-C0i9F&0+V2IML(QPGs@YE9#O z3maS8C#|ils8r(<6K8JSa*NAal4Bbl9;SULUW06XXv4I8me#3waiiqEcZHTS^J8_t z`x=(rxOHn8#lgWr;PT0nC;flCWBpQfGDbINhSq7ib7!<^{+aZ2zNVx#F-Jc=SSKg9 z9HpxC;X@>H#CMz$Fch zjd|uuHQuMaR0M^#1@l$~j6R8G=l5A!JcTlb$G0l7;Ub}QWy{g_s*~ObkX3CVt_FI= z)`NK3uDWn-6o(j8e=(#X%E8l<4bfKa@s%)rVf98ToOi0QG{{AXt;dvx?^`R7% zmX`MYY+o%SW=9hn93E!fy?eJ^bs!fOt~u8r0o9^hyr;OhSlhGIDj;ABd4+8uQ){KA z*;rXw*NTz4tvx>f_vdtL3~m1~(1y>~7Os(x_nDC$^zH0~{Ei>bxpOB0Krd(i{lfyP zK5M%l9G&lQ78KD8i~w}NlN*&!GdUDV_~s<&H!wTt=un97@yTIJvrJ`1ly%X+p~$%5 zi?fpS%a(DiULA+CVl2T;R%7{^E&8bTeS?FI8N%t}oFba_zK@{pT2)!!9&xRV@;U(*Me9Gj9tVm2vhIbvMVp`Mzg zbwo;1j<$&BnZXoo(qjEvnC=BwiZR;|dEo*N**PWWrfkC`LEUDTqR)N03eDU+Jipr% z>KxEYJv#Ao)jQA4FJ8P@n`*3hYR=#6vWm&%+e`OyFQ79*vU3KwYH4fJL)GS3zPum# z0qq!vh~}lbmCDwMGhH@n#~1$vP5$iUw6?bH&g_xkX02VAIv^n-v3C7>Myv|9b4b}u z^oE0H=f8iUqbDW^zCds)9qCeR8S+zAS9f}zwh`&Ktlncak7$n`zZ#NnLD{p|Ry_PdATTJXCg9cEFJFXlCLW!df1p#ifB(?P2nSM6R7?!N?OiMB{;{zX z^o9LnbxUUv_|egf)z#ICN4r%}!*sHrCdM(3Y_a71U*|F!jFdwnf{ftuf)Ej*iwpDVAEj^dHd?v&!6qC zs`}E)9eD5*$b!HPfi-LLP$>b|U0Rvl%p?Li4@#&AF8{Z%PVcVUnf7^9l8=qxir>WwkYe zJcgt<+fpMcBQL)Ky>H{`Wz6T&(inic{AulU$G^RprI{QRkWqNlzLa&QDn9)%j>~`f zc;c(c*KgmRpyJim)?V6jRPYf0D}C_|8<_Aj4d^=nHkeRo5w6U~zrT9FqTV@iA(DL| z954UQv*N)EKpAbC;tAg!rlwD(d&5(Zb3HlZrbj>V-#`5FOj1%(`)>gm>+i3#no+H| z1O?-FT>QwpBPbB1Y zja}U~F$rf0wrtewdE3hhwLTVPJdShi}Wwb9ybJJrfjO?q%XLXx;`Vj~-->!K3{CKxMPriIPNOMn2zvNdDbGO62JhBI<5TpSM^(bsXJ@nKm-@bY}1bNQEs(|j%gaZ~9 z-1s8kP!yNAVSRl)g?x-)P!C&LI4OU;sYma^hMgqmjEo%lH{QreQiR~vV;m^>vitAd zuzFRPZG9&?x&GCUHTukhFTbs;9 zO#teARG$m_V(X%HwF~$=?(hj$A{uO*LFO1;Isi>5*oLI< z!!Iv4fP)fN_pfh^;oKq1EW;eNXt>AXqWnQq%2+<*?aAI#Mu_%xm3F(Pe|-r#`pF<+ z6&EF_7n;h0t z&P+sX{2lpt;kstfM45MjlC{3Bo?hXxFOL}_&}n#p9WV$m)|8XmIX{hKCnnZiby5MT zcF)lB^kIO`?!TZnR8V+E>)4ffHIvIY*WK0)|I4o|BXg(y@xIqNJT?CeetfRn#8oq! z;ntiiERk+nh-Y>2^fbMB^QJ$jgz4wL2=$4{Nr^apUGm$|y>;4WDQ&1mUQNx&$Ow>a zyQJi-HFxsFi%Uu>Xlng@eRI$dtg>}GdUPjPpK`RbV!@SfQ!iZ53l0u`ch7alXn=x! zwbZ1l*4QhpsDf8HJMt~iVbs5Txg2H5Cm^5+(MR|1_=F~Q z)olIz`6|dyJ+|mG;GaBb?K%3BukGi(>lO^TYIUQB+(!jKr&Oak^PR#$HWLO(l5J9aPVayga>A^Hce0X=&5JBY@ro zXxqMyj_&LY{gV_Blq9&h<;|P(D}+?D4_?g3Fv8K0r2LWK{7#;f%rrAZ4*2@>=MKbJ zVp7sD3W33*NM>N%?RF4UyRmKE;aTb@;sLV^D7I@41%b0#U6e_Fm~88Qe8TH8U`j}x zy_FU3`$EeY>RfTL9KdR^dk>4VnK?F01%=c?ikAeGcW-U5F4wfy`Ux}UD&qj=dE-xutO)Ya8Rb}wrmG^KPAhWnl zjE}FyG1gxi*@=1|i=P3TVN$gKl*U5I*_Inu6`{5;MAXjxxO1|$2kE6CY+fcTbKdd!SkwMOGoc%ocv{uEXP6}eB^W5Fi~JT z;x>A!PgFBdhdWL`B!79<4!1EqUP*VhSDW@0nA3q30GzxPVB0x0`pNleEEkYpGaiYe zKs6NDR!ARyb(Iyp8|~-ML43!|;`|s;#pQ>!yBgH)fx-~e(h|`K7^%M?xw{>`#z6Rm z#4>Kl3$3M~%v@Yt96*?K-FM@B@$#jT-`AFtJ=KK{n#p;2;=r$E$G`8Q(1tEsDI$_A zfADcO*s}JwZwUf4GczksIauMz_tmd5V2heo#;cx$_Fk!Y-G+yq2o(ST&%=iTCM3JS=FV2`{1p8WNB9SRYGh)-_+y{L-{hj!unB~p!P6GLs! z7A{_jjm>R8!hpD~&+(p^_ z7Ix4GT#XG4nf{LTX5FyZhz;~mFbcT>{L&#B{%`wWb4vK&PzhFZ0~Y<>g9jT99y~~| z114KCci>9c<+v1gwwgZMiTZk-Hys^0z#06P8SmmOVXY_aU#Dkf?Zz2e-a6#>=KcG8 zK$bshvQ1rHSe=%)Z!b{i0O(O{Xf+}kNNI?rd~hhMY-ir zs1h^3s>TT83L@xdQp)t-zt1kp9iS*k6NsVl>FMtuzX&*sx&jAZ+U!Nzm%}eEoknV{ zK5-)$;0EmCb+pLpCw{oQ-F@e-qWSpRsg-+p=eo+A30q)w+lmzw$?4Ol6%`dD5cA+L z2p9rvckakF0QuUzqnk}L?4JN6oM=$5ckOG~km^tOusWN`o;he$k8Yg|-(j^r5^2Pyb2+rXn~V6n@~;$ZE8Uq&357bp|yUo0u47w&AV4 zsBN}sx^(G-2aDO2S5`ZZ90fu~t&GMO*8xuR$yn>7f_4BO;N#eYQ{t>L75u?Bf#h8a z-v997!{=IEa5R^VPZ-KxQ$K-2%|lUWW0=RknFs=LFjMX*=&bAA664;Z;Z41IH4&Xx zV@C&9M@I+b^ZKMUTOGW-5;8Zr)jn`;=#u1_;$4i95y)8_c*bs98>)tEwOvC|9sz`N zxO3I2RsK^W`$wIXm6cmQeY%2}C_YqoJ+?>l(p>-`h6pT3Q+FX=1LuXdX%gbL<^%bjKS_~mHMxa{$Ply8N z@T>?9Pf=&kcA}!9AU_?!aZ^3j86rYL9EDc#z}pvJTyac{+vVeC-@Z>d{7(~JqY zlQ2GbTK6xHH>;og#gT8ZQO9D#7T06upV88GlsOxrI|pkgzGcg*PY;g171_m1p(_D_ z5q0)#E^1`=5C~?ltVTzUj2y_)#%7SG+!nG0 zxWVj|28`MQ0cjB*=Ty7QEFOj2HOK+PSu~b5)T=P@N=A<7}9Naay8G?__}!eOdLPthwNLo zV%poy2^&(?)7Hk0pE%bx)bjGB0f2$e&kx1Zmy1YmiatmE*yl%d`}TDXgsw?cVxr6o ztppSuC@?z90Z&PrjMXK-UO)4bUijVyS5X=3A{{?JW$U|k`)MN2Ah8najT{9eeUG;4 zK9R4%tqrj5VbMZ<4IWwwdXl}j|$4K$Sk9WIYJx4kN5Ml?C zocZ_Xb^rJ8F(A!Yv z(BQU7&aV)R$H#qc+`Or~;R360j8YTaK^Y3oX&WugEB#yvPfk=Rb#58Q>X^mT0lz-8 zf>Q&;WD$;5YAWBb>uM|>m&k6($;se)vf5K^SO;~NbkHvlmSM}0E_2$hV~I)|%26QK z0ZyUMG60jOh=v49!u>Snv-TOoJObQ-Mxucf@DycY=_Tu;n%9df>9Kk_GYV?h=om?J zsjr&XA>7DSwc~x?zMVz+Mc1uEGcLO1n-hLRd+8q!RB&B)cPWIpxW7Dv-~2z1hqk!JDmFej1UQYO7fGt%b|IE{r=s#<=i@5Bgc`v^@povkDoB) zKEFbiQK$Xu4ZZZ0^G%~RAAuNEgfs#;P}d49^4UbRLZ$pAtfL;aYeNs_BKQC-lh~Fm zQ(rh8ig@pBv5uH{Z`}Qm;qq1gQNN))uacw9&$lQjC=h)_p8?8Ht=E-UpB(W}qXT{sg`SA_PL|h)!O8m+pXisj)!|&F`+BY{F(WDX=?tonWhrp*I zz}D8kdUdyb4h$S!pxP;^-%;m>bU}vt{`?>ZMFT*q`tNgL=vQ4`UBpgS8>x5L_TPa)L~FSG1o8w5x2neO|{}NG3q`L_~3N zc4imO%`nYJ8hr|sM40gxSJikRy*$0=+NKCCkq{GLqB=z`x*5bQ86`B3#8_yt9@&E| zLd^!q;{(Mu##splm zl8(lgZ|=Gl4|c>E@RHVB7oO96>sH;>w(P#cicoNXuF>o20u-gDr|+R+i zgS16VDka+^{1KQ<1g>ULo?7e{wDXkQHd&CP;GZPq>=&USJ>mr-qAC5*wM)r@6E~nhv zv+3YJ;^N_nRH*yMjkxaC8v#db19XfCZU>e;^5t=be$S4|wUY&!N+AP825)MnMm2^Ic?{@GZtt~CF zKRQcxgMoX0%(BFO8#qM527%fZ7t6&j;+)HL@rG{yVq#*V1x>To(!b+5d8K})c^&6c zQaI_d!3|nEISnvx3jiKg_;`9uXzJKFj_&{W`<`kye84|7KYzz_kDO+y|N{Wk*+ zej;mGt&s2CC%ZLIZ1W30$C9&U5N;8M9HU0mPq)?Sz_F*=6* z$XN&h7HH|}x->E}LiQ*&7HXjmp)d-qOmU>~Q5U#dX=KY~E55Ss-Rn#na!zC=YJ+D5of(@_L{oq_YbxH+WrIMZBEbBU1A$_S!>x@&7Yzsu7mqVcd&pJm zS0B6@rKP{t(0fhsEILI{9zmlk_kund?Ww7f$Sw2B?ei(HlfM-k8@oHK7PXU`@;h-t z?u@^gEE|*A1Fz0xs(rk_vG>szJc*Qw%4Ee5V^+H6lNxuF+#D$3Vq&HyCP6>95W)rP ziKRvmhR%WIGC|3Zm6bJ>-oR5?TB-;q8bgG2iTy!|*O_T)`VI)uMZ7wJp~$hCj6App>H5gD!6MIeOj0NCE2d)~cEgDkcZ7CI>vzs&UA{PK2y$Bb--b^LaR zUYV}q59VUw2_T%s1i|FxDlmb`a?6ec@4zl z#uV*E8*Zh{mguu*2Vz9SC<>f06Ec|mM5mP0B*E9~*XOrnWyLk4D)s&RnZU}kVf^Jj z)0O;llJ`nWBY>TWdkMIUxFq0tg0-drtVusIHz0DS$oC&V;(vXqa)tvEofW-=n-j50 z&@E%qfy@W$+q))|X894d`Qyjc`cWtfPC?5zh#>dt0+^By1V_y-e9Nv+cZq@Vp~1qR z*V-LW3qDr|@sLsu7I=!bX#bsqGC5r`Eu92=j3+QW|KPMikZY_xld@ zLu{gbyf1n0{{7yW?OvdoK-RAU+J?1g6R8^zU4HC~AWoYON(kwHwr#874mpKJ_{hh5 zjHKuI_B!j3Q%T$N+O94e0-x~W#3eI(|8DH>rNdksAN46SFT(c0k~EVa+9W7#M=#q9nudYMGom>Aj5&xPEJmJa4S^WB|{IY-LY!k z0Sfdp1c(yUjejVRy3Jh6d-N0xMT4(cfyjav6-p_urI_`_XH88`XoIMTjg~iAEWS~& zWiqT;vj$57;{*Ho)9FWvmm11s4E*J**K9q;tDa2qsd%Q@)b>wpLw^6DDHG!W_)J@~ zLYw_JV2ga{eF(535551h{N*Br=8_!8V#k~o~8@#=}8JL;HaUS8W({0{p8OT|~ zd!g0ErqXZyt}LyW87I=jNy`bmO;K12g>=^y6vSoXEr9=XMtO&|%L-xjDA0by{{-4` zmHMvCC(-uLLE93Ge>1covSB*#2tZX}2aiIYA9}K`QLs#=*;(udg|#W7fk1`os#9p? z+3Zm|-571pG}2wcj_Msexb1yr;7YEuoTABq5>~~weAqSlzx!0jtA7=#Vuku}1|Inj zb8pyvT^4Ja=O1pXNaAWBVM!he>G>R-R+1Vkiq1Pns!QjMdM|8AerRF~O>2@XQEB_uQgF-0d^-uBJOScj0PTUykB z1)Dg@at2GqN}=Qsk2@en7t|+c`O(Rf4fZvE1hX2PpXI>hP2}q>$3DjbC$b9PdN**K z=6deRl{Lt%$)MPPuXp>v@*TQ3`yI~6W|XM2sp3X#!ozuAzkaO;zJwp}QOLABbRRHA z`nR!&fOkY-bZ~WD?|;=IX1cvC8wVd=10nWRvMbfu=8XYR#xZsh7N$kUA<(L@;P(yx z{7FWAsF_j?8GFfHS7AiIK2@+%2IeIWNd4P^EXX0gZc@l0E%h7Z>67>G_l9`AyEpQ_ z@mC@rf3z-f@AN@$hxzDoyRWIR{G_rch*>HET_F3_s8a=C`3He#An@ooIIIPE9hE%U z8t5P-vk|+{O!{;zSMB>BOO4;#+e+cC=|hQV#^3c142by)O^JXIJ&i^&GPX46&*6^H zb#3s=qwR%218ON2C5lZrF7C5i)~T~tJMzZLnPxQAeEPAR3`bIhq^$}fz~i$EN7uxF zkn4lLjN)>Hj+?vjIHkB{iy@K5?jK%GjxX>GoA50w;$(-5H<{>9FpcFe9u^sT zpSXHcDP%%8(%|J~+wA#nrMgAxClCoJO3AOa<~cC3z^lGOMv_ng5F!S^)F9M()RVJk z-X3CrtaABD#LH1BI@euq}qfcrmSzHQPp*F%B}aX3G#)x60WFhv>Uoc zTtfVhSum^MINsMVGy6R&_3~wDEN?s<0gauV{1iDZgpugef7bjzLtjkwd0+OoDk&<~ zKREh{DA0IiR$(J^SU-PbkM#EK<43*bM{tRzn??idu7k}GT|`s(()^(uaXyXO&?MFz z^s&U>0nJ9bzut>g*h4>;7x{IR?0+kKqB2P zmfDBaM>6LJ_Xnr2+8LzGnm;`(f=PyH%VM8RCqJ)54?w(z|5a+!O1}SP7$`uKNk7YP z^=&)i(1>i;R}GmeYWKBK8^i<^$bBbtfv|Um{|vAwoUFJeqV(D88jQQ}gSNv&ktnJy z@?Xa{ghqM=QgmcuA_t+*k@)d)af6M&%#4BCPMdAeyS3|D&*PmC&j5B4VY3}1K^mbO zGUEF8{ss1fQSbr)m653uysZY$2D5tPUy@6Sa$>j3q;=WgrE}mX0iOxy{_UQ_90SS9;s1U!cR%#zgnt$g z=xC~US1BEYs58i*fV70WNiwwjQJ4KETQ&8Ky9)7;LL!~9JIqQ@C>V)Ebh)S(%-a9P zBimCM_7>Z2)(jk{08(T+^O7@t&R@8&r_9L!4%=neY3XwLZQF#w;xxbkVh(jXSDi3Ca*YJQN!zXZZIAgoS}Skq}8J_7Dj!1RR7~ zKu69P7uOzGhs#_Sd678YfeR#`G>LJl4rJz@#|N<_1zCfNUSS3QlBip~cXlhjH=oVldd=wkqV7vwL(7 zl&$?ILs$?tm|ZfrQ%Ydq4_=LB68D6G8MIYuZLL;xR8;kePcr-NuA~IF91+-WYkOW_ zEC-F7IpUIa!>W=);S1>$A+EfPbf4eH>03#`fs}Ubnw-CobuwQl)2l4)rHT`bA>DWb z*g|f8Sr+~tuhi1m7zvPyt-Rg!CyWi5f5XxjcqlkX^l5?l@rHRhII~=odeFoTa?(11iixEHKB%pC zA!pnI48%Iy+g}fu9cs%c#Ih5E9{#od{9ntof&23#JCjAW#m~$H{=@doz<^EHmz1Y^ zr~>K*FwvvRN=TYH5>D~2Andr8%_wlpEYL6BAM~C)bb?+^!yo>9UEmreOdjTlUzCQA zOW}}neiJGjF{Xpy;m2y~ z{=<&g-InxJEQ^Ve_1dj!BFb;$1vF3j4vWl6uS90Fg>ReK+|Y#*U>XqAFg6N|h~{lM znTD~o%|%l)1M+ISK4=GK;^YU_oeg(M>HYhJQ>=J>;PSYum+OnIy`hnaHZs4}eT55e z29NJD7$k|S7;~=U-GivOsHGHo$=aYc=9bQtwz7*m4t%4|iIj0}3}0Ab>{_7W&N`xf zC-VN=Z8_rUESJhBD{;VKcp>g+P;IdEp;)IogSSWFJ&WK(BYx;WH~=&m9{l+6BZv_J z1SzTobKg+fJ-ib?Bt6Du%a)+f{V!T`EgH1Q@+wX^Sf3}Qrd+@iaP#U zVO`1B#2Jzq6xwY5gEaH^@An--vMl*2vGTMB7rzB`o-2{Obw<;Lx_Q3lQEjR zywA1cBxYJ5gd-z|4GyA2#DT7CeEqsa!a2huZuN8BrB~I09PSf2WA6l-mOrjOp)obF z!v&~|Zrt&twK{S>9The|`cSuRX^F!JKffK!GtmYoM?Ug+czDpdD`Y65VZi)Y0OAZ@ zS~e>GTiStP}IN(SYJ9(}C%b(!01k?O$T^bk=uekgKs zJX$0*>77})nbHwUN2w*xV$l#ZiML|C8kO$$(7X36kS*y|knVtb>U=d|g|DzpB7`Wy zi;Uesfdk>tH?}m7r{2n0Bo-~wKTfsDYhnrZvF3P?zB<;eQ03r9${rGssW zx^?UOrj+4N4@>qet;m0-TN1&hP>-7hmciFW2+fh+I#Ki??Vc6SekGMdHv&mnihx3) zF4h#==ROwvzJ5CLa((Ludg=R}=7on(Q4vAi%R{vbSbP57UZ_pv}JycW5k6E z7py?FiRbUR{^Y{IT*`G>x^v)%S;%C2iUob6SR_CoNJR0lU#5)Qf;q+4iN1^Y^R4u$OkSxuH2lp)fd(dwI< z+$;l9VxDC?_Nub_=cftNWu>3==I+9LW> znT`2+%bA6NXx~XP*-H3dl+eM7PWwhOrABLC=U!pk(cyABdKY0{KsZHdotleHws7RN zUzq#kZD*vwdN=Rw9Yp~SVgb2&^{NkMn+SV~VL({I<7n>pp6E(qXq)5!%po>`;ni<0 zT!}#py5q->f36APhh~yH*ka#5Ewgc>Nx;_fwLzcCJ$TA(<%o*Hsr_%I`n46Jq2s4% zHus+DN>cSkqNk$px~;#m87l9Um+PatP(Ix?60&k~{ey$cBCu(h@VUGzKEMyWVE}>2 z=ld&Rkn}$)k9Q6)m9-Zd!$|~om{3n0d!%t1z7z&lYpbX0LjfS>H$X;I4x*%yD-P^~ zZ*1PypnFRU)@B{xT1DRhecIpP4qum&aorLuwC}-33^ue$Wu{0va!&;`1Ruy>vi8*i zI7Ii510V$jbk57m zyB78t@UXe!sb(XP4p0brWWu@c;sWXa)$!a~|YqN|j* zW5fK6!M^p!({@oS(I>$pLZDs2-aD)C=3FaR)+;Y1;GwUM)y}Vgfd@)2zp%m7_3Ht* z27J4(MM&O~o5C~_CiMt|L5AMZ^dH6M+1ZeH~{u$ny~W7|NfEr-hkOT6mVmmM*0f8E?((&;=i-cJ@4 zyb@{0Fwp(v?ORKKm1j;l?Ae_^egDn)hRzM&!ueofXKw__V$d9%gMxr0&9P>SnLqEx z0lH23mNvA1VH-OyZ}uYIQWONo|7lsjZ%iAC@S+XLDl2ot71M|+lM22cGCpJ?Mv@H> z7zWKDIUpJaFxzbi$KteYUH#knJA?4H{P-b_R0GA76DuOGuv8g_VOC2yqY1 zM)i2vZ8de5^Ii??EwL9yg^QFh!3f_CnyQs9w!_EAC$N9wfUT_{shBvRAR%D=>epVH z#p6-RQT^Wo4zHU0#dp0K98wZ_*wq+_1h=h9NaP zh%IQ0(=ATMvf!hlgFXQ8PAo47>Z$C|wx_2M`W7deTzkbQ9n?@7U9m)+n)*X8acu~#J zFi8(1S-!!a^#HFX#nwAOvZdj+7+Lk}t%HJ(Q$chNB85jaI7IBawQT%rngj|)L#wF* zT73xK#7g%2Z|9+eWN{f3OiUNYG&txWEOA%KMr<5(*?OdMLbZZRtEi~J#?j-o;6f+G z1YHWLH0RE(gw--3*|0CIssrwJ$EC#uLeFcARYzhVmTf+uOFoC0Yud zy?SYJ9W_hG}l?D-<+%6u-Sk0bKH~xwRs#I0Z|Ha2dmBDry(v&XaF61 zTn2}aKfiGPJYgb`WJZy7;r1nhDu5Achk;S<5=%t z08bH%HjXXk43qJb+lvoxvr@6s<-j_K3W^YT5=z59lS7=c-7{_2;mTuDfFQ3i)Z zJdJ2fa$u}L+i@E6Z8V!nwwYCCD=|q-xK=zpF@GWVbzr23+yMbi8ZTi;hUg#pItK;^ zJE6DB6|ZYYjUpFbAk`%#i?QQu8%)oCE4Uv>#Cec4Oc#hL&7W0+Ka zhVbCx<9nvOk6QIuha?hEIOH6Wz7f$yOiq*oz@M?PaXp|~|Iko0tg>r2Y%ug0_zoK% z20s}o=z|k{z=x{#G8M2Etev;09SE1`1kM`>?-&iu*a5jg_Gdjb08WVLZ=M zaCN7N)y_eYcflfLw4xI;_=*_01iB-=0_emuJat`=&-UEfCEPPMQ};g=IB5*hF|b54 zZoMMoAjE+3@t&)llS)B61NJ2q#o;Dgq1A2gEKm zSZf841XNA@%pH58WMm7-T_Koq^bwqu`4@H#mUKo&#xrlFc0l8T4JD=!V73JXg-)J!p2BQFaY{Ic@>lrAFmr4`fpQa)+%1! zC}1*Yw6@gsZOa~yJKsF>_Sbs1!-uW?-zoJ{HIGp)$<-x@LoyPZ3i~kjJvP~3X#3}D z2ZlYOrv>0k%Rri1Po2kPHV(HWA1|*lApOO~nL*Ch#zwu{c-YGC2P*yY(ZsE($=9c zoq+672(gNrYK2?V)Yy2XaNP6N><2fnvDaj0>pb=yJPSN&HCYL^z!V(8MF|r!khqra z9KwCj?`0?E`BCL)G${m}*?9>QbU?q4r^rZ2oh!F3b~$=fZu7CvHi#DM%5P~2n73z* zAkPUs0(C0{CHFjKOwN@yyOlEd>of=?@^lc9uijYt_gxzRcCD=c>Z+hWH(i{a#p%w$ z8JG{w)f6AJjCn1d(=lC4hfzFIzR`f==FlR2m`3*t8ND}oJtVz7S z`_-dldq4O`+%ZK*-ObB*`dWL5!^p^pSV)Npa@Va!P=yA~VhuJlWvf8G5Pf|H)L3%w z6sSyc-yReXYWypIc6xex$9-G|Ku_>1W>02Cb^#!UFs$w@~}f()QU;))NF^k6{E z0fUIID9kasn}LBL*BhZkfaxP?vii>}4Ge-9Va&4~p@xUjI;mqo1mv2Klc9g#?=$db zGuzqEvH;l^Y3j_|mfp7~?Joo-#JLfJIWB-94j))>SK`J2bX*v^j!iaHexjR^^F+=O zH@-DM9_+ZiSB6|Y0`?v=Ve$kwRmiI+kHA<)q$s$D(ub6qbIFVa24ygo z@&x8xqQD`a;cO~D)y-H3KC8w)h3N3O+JT@;l7Aq-0J{;x61pQsDo^xFL5Dl>)F9A_ z`-7wxTpKaow8k3-D&A`&e{-u`_QKNvPFBy@m?bwaFX^)7T{IYeh%G3$boCx5`&wIr z$n+B~Dj;_W;I0?MUPg1po2-F4j?62Vz(Z;KZ}tP0D2P?E5SeFQI1^JL&Y-~1-{nlp zkSNKOb)bcF(Cl8)I4O@7qmM?5g+JD=HgtA(-6Ad|(FbZD!b%+j)s;hY zy<1lyLq7}KiS=C%U~@rJK7Vd%ap(OTm`KbfzDL;$-}>x|F`#4Ud<@<`ps-FUc*%9pbD{s(pbSI1IaF?a zKtx6G<)-kkj=9+-oV(LF%Nd8lJc?}YJ@c48fB(S)L)`8_>G<+<2cRb+O&4qh30eUJ zBnAdLfHwot!HPlI1n69T*RC#dFWyO2LT?YMV*q8I_Wlk(7NQhG!tY8Bi9+btL1~51 z2zphnO`~*MG1_V}?M1Fy#2a?_KIh}Sv{5*}mJT8}31re)V$WBjSC{Vz{wW6#O@`oS z01FWjQtBJ_I!K!goZYSV_UB(B{DH=UD*xXE1oU%*hu@2gf&U!6yx8IT`iF6;+`+Uf zxGIobMEC#hF77=bUVL1ShbFEO`=$?TOmK||m<042(YV38mUpb>$Y%jC;0~%ZupgZ_cM=)ucLX~B(F&yF(k z3<3(mRhErj9TdSmbg0>I(+F%mW*2>6%gh}%BO30iY6L=Myp>uPZ%_L_6z#7s|5=Q2 zKxdk@7uTt;+9;$DFTM^~< zQOsnS%CRq5YE(E>%7mg5LX8&N*xRV=O&W|QDw^mT%9^FRpKp)3ACLQ&`!Bezemx4Let1dcMX#*wu+aEl=F$n2q|2oKrKku8_W!YSf8mEGkBq$Y3&~ zLUof;=oSVN_dzyUFqJXty`Oj{F%HrFOwveM-h#+)L25hMkH!IeWM}7Ntf5(_xzCD%D}8-MepL7;Q*(;CoiSpRv~Utm#c+8_5O8aM*6e zNRrAU##ahs!9~bo3GsE!$a1nO6VjV$REDP0o+ad*H=wU{NP#~uwFmLEU({XT1wlM< z8w%q2drEBDIE^ik=d`;g7j^>+*n+PwOgGy-Wa=5YcZ%WJIqnL*(Hbfc?p-8jBX!*k z;#@b0)~CS9y}OCJV8fK;ON>Z5N*Y26!*p{70>sIwPpfrfkApcUU#A=2(^;Cp{`5U{ z$GC0VQDSUbUgI@z!QFPkx%0gDo?T)Wu_x`;=&xWt0UL#YD|FjZ`DBTf5lH2}gwbLz zJbkXo6)FP}0Hc_I{SZzT2*-lE+tTodCN(_7H6vk4a&1oAVWRFtQoo%knnPvcdSGJo z)#GQgyfVoon{dK!a(5)O)W#!`Z5Gb&Fu9qHHnJ1H3)$t36jPtrnSx>{Pm5h%CPDhL z7I1DYVM4^`E2$r-FUI|Bm(?fL*=HR89EX7x%c3N@^3TpZWHkJrvZFrr)%W^!x7-vG z68)rqC@MLc_Cz*(i83P25M#d~WrS*#vHk_~@m?+FUb=f>IGp1TU9PV>P(+5EDC>kn z1Ml{H_l{(t|-oD4BJ|0z;NfQs> zI=OJVBK3mqf`6G4c)2L}z{f_B773a>!(>2M@ErbAs)jG;Udv>PQ4Lw680=^B3VyzC zgI!!k&5tbd8z?xa=f>NMR-4`Q%@~SPrM6+kwBk3CRFN>~?1|^pV z>YNvGzIwD;G5)Bwm+5k4ebC^oU%lMs^&zbK`v(_>Vp38Jad=zLF%KqZ+GXdV5=a9l zAwWD={XK}}w(*QrB4c%OPQV}akK2qaxuiT?7B%dVZ$-d&P3f(VZaVtSgHzqgA04(! z@jTxZ;E_~;(|6M}8`Ah9G){T&QJWETOm<707GLdouIa|$)Hj}+{`jrM+^>q8D7sjk zGz*wE%xC7^t$mH}=X`h>*V*Ceh^*0Jx#cGZ9ho3hJ5UG{zR>N8rfg}-mB}e-?>w6M z-JO<|cfIFazi4O|rOD!6+?cV#W$3Sl4pZAG6xZUa6TW+UGa-E`?*q{Jg-vL-)!uxZ;9Q;E()?Mtu6H-p%0xYRFbOTvAvnH!)S=L=AtQTh+p$ic?BGMSyNLYRA0Tba>*FSGLXnoY*$BLf1 zo;0ajJE6n5>d7M}_?f-C724(-_x3F|mc@3sC}%FT8TCK~(CTt}OK-c*c8e>=Nj*j( zMI1((HOAj*B5(h5bKYfDaI{)lWX2SBp@c!ru^4k0YLn2l_1=KJb1Kab5l zQvYAqmn~_vE{HR9TD-$vcDdwHN&a+`)9W z*o#&9Q_+ur*i?WYpsJa5dhUUFU0S#JSUs!JiN4jpJl8<77y<$UfK}MCG~t)6mqi}P zE?kal5vh6@YC(Wus(~gz01U2eNlYaL3eq={GDE75H5D6duQjifK#BvjRTG5d0i@B- zQN}iFxNJU+W{^%o!iPa((>a_WN-C1}t`(ncqjuX06oDK?Lc#1@JiExGQ>W&L2gGMc zwI%6MOec>@&ErsWZR9VAh4p0e9YW9t?j&{y2q@DJOOT#sQ7iKd+7Rd#=;C(<+{W(v zTc69~rK}OSiIVhlhI({)t2m!(j(>#$=tycTXW#hUA6~q?Zolx4W{eg5X4j#K*1Jhf zL7tZeP|l$(E_0j3X6py@*a5Idrh1NF6dOwrIATrxiCW5*axt#~I03C~?NPM9yIR{y zLQg0^`NdjN|7J-`y8}{ZzcjZm#_PDZ>$P{ zO0A9Adt2AjQU5+%{PdzWpcr_}zv8kn_Q@_^L_ZOz33zM*tgXx|hy)CL^I|&`v>sKp z|9ej6TzW_b=ElMWL0RaBMXbk(FfM*b7wVd_w-GJ}>!L=7n}8nCDSCm*=o8)hp#7FA z1EJ))i;eZqCGiE#TaL;qazKMNQt!Yc+}PGJlQ|U;A1@ftf&Kd*3PA$+FQ}KuxL8-z z*7`)H+W?QM{mVf;M;;gx9ey+>=`WdpFZVWTkec`-O1YrKqynXP;q^+_?;0Ag9$t5S?Dh^pH!dTpFo=;!KT3L_|l}&Z^wQ|i%uC^0q!fR zNFk789Ne1cIax&&g6IQVdlQmqd#-u%Z`=wzhwM*XzL5)LMEaGAz?$>~m zhj|`5*hC#Wkl-6}${-{pLVZis;7jVom90fB#8xbM?IxDLhnf@m`x3w zw&+haTw&U^uqub{2_5REN(w0`F~W;!ss6;gm_l zI1WA$V}Y}E*hS7^Q^9;ND1OJuF9HIGZ_1acpDd`{y+^v+=!fVDEqVIK;$<%{@H13 z=phS_D$V!-l*CL7e_~g;+ivx*#YrIeI{P2zB519UY+D=7X!Z{|*GE^?To53!)}d+N zkU%yTZsX4gbT&p*|%ezrPYI%Gysx_skXC!?Y23}tD0sbT! z#TW7Ed4mfJ#-vABXe)(L+#y-GvMjcA9^j)_fu~)TIeeN24*!bh0uto2W2RE0qyV|M^&mt46b5VWWkKXwEPF_h0_Q zM=Z0S>3e7x=_3Ae>`5bsXz={gA|{5L!6CR(&nE`%eHED$@348d_1l7wbIBPuV@64` zrG=T9es*-hj#Wf+)Z*5fLkg&Gt(LjxK4w?O@<>kpto!%7i7ZfH6D&nLFBP?yua3Uw z8~_b`33H2_uvDfal8T~>C&}*)xZ-16|0D@9yAw^Am;?xcJ1TQEdgIjiz*M)y%U=c^ zotoNHvgf2o0`OW>oWxw$w_pBP$!u4KiI KYK}U2ZTKG}=IAv5 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/test_axisartist_floating_axes.py b/lib/mpl_toolkits/tests/test_axisartist_floating_axes.py new file mode 100644 index 000000000000..de722660958f --- /dev/null +++ b/lib/mpl_toolkits/tests/test_axisartist_floating_axes.py @@ -0,0 +1,126 @@ +from __future__ import (absolute_import, division, print_function, + unicode_literals) + +import numpy as np + +import matplotlib.pyplot as plt +import matplotlib.projections as mprojections +import matplotlib.transforms as mtransforms +from matplotlib.testing.decorators import image_comparison +from mpl_toolkits.axisartist.axislines import Subplot +from mpl_toolkits.axisartist.floating_axes import ( + FloatingSubplot, + GridHelperCurveLinear) +from mpl_toolkits.axisartist.grid_finder import FixedLocator +from mpl_toolkits.axisartist import angle_helper + + +def test_subplot(): + fig = plt.figure(figsize=(5, 5)) + fig.clf() + + ax = Subplot(fig, 111) + fig.add_subplot(ax) + + +@image_comparison(baseline_images=['curvelinear3'], + extensions=['png'], style='default', tol=0.01) +def test_curvelinear3(): + fig = plt.figure(figsize=(5, 5)) + fig.clf() + + tr = (mtransforms.Affine2D().scale(np.pi / 180, 1) + + mprojections.PolarAxes.PolarTransform()) + + grid_locator1 = angle_helper.LocatorDMS(15) + tick_formatter1 = angle_helper.FormatterDMS() + + grid_locator2 = FixedLocator([2, 4, 6, 8, 10]) + + grid_helper = GridHelperCurveLinear(tr, + extremes=(0, 360, 10, 3), + grid_locator1=grid_locator1, + grid_locator2=grid_locator2, + tick_formatter1=tick_formatter1, + tick_formatter2=None) + + ax1 = FloatingSubplot(fig, 111, grid_helper=grid_helper) + fig.add_subplot(ax1) + + r_scale = 10 + tr2 = mtransforms.Affine2D().scale(1, 1 / r_scale) + tr + grid_locator2 = FixedLocator([30, 60, 90]) + grid_helper2 = GridHelperCurveLinear(tr2, + extremes=(0, 360, + 10 * r_scale, 3 * r_scale), + grid_locator2=grid_locator2) + + ax1.axis["right"] = axis = grid_helper2.new_fixed_axis("right", axes=ax1) + + ax1.axis["left"].label.set_text("Test 1") + ax1.axis["right"].label.set_text("Test 2") + + for an in ["left", "right"]: + ax1.axis[an].set_visible(False) + + axis = grid_helper.new_floating_axis(1, 7, axes=ax1, + axis_direction="bottom") + ax1.axis["z"] = axis + axis.toggle(all=True, label=True) + axis.label.set_text("z = ?") + axis.label.set_visible(True) + axis.line.set_color("0.5") + + ax2 = ax1.get_aux_axes(tr) + + xx, yy = [67, 90, 75, 30], [2, 5, 8, 4] + ax2.scatter(xx, yy) + l, = ax2.plot(xx, yy, "k-") + l.set_clip_path(ax1.patch) + + +@image_comparison(baseline_images=['curvelinear4'], + extensions=['png'], style='default', tol=0.01) +def test_curvelinear4(): + fig = plt.figure(figsize=(5, 5)) + fig.clf() + + tr = (mtransforms.Affine2D().scale(np.pi / 180, 1) + + mprojections.PolarAxes.PolarTransform()) + + grid_locator1 = angle_helper.LocatorDMS(5) + tick_formatter1 = angle_helper.FormatterDMS() + + grid_locator2 = FixedLocator([2, 4, 6, 8, 10]) + + grid_helper = GridHelperCurveLinear(tr, + extremes=(120, 30, 10, 0), + grid_locator1=grid_locator1, + grid_locator2=grid_locator2, + tick_formatter1=tick_formatter1, + tick_formatter2=None) + + ax1 = FloatingSubplot(fig, 111, grid_helper=grid_helper) + fig.add_subplot(ax1) + + ax1.axis["left"].label.set_text("Test 1") + ax1.axis["right"].label.set_text("Test 2") + + for an in ["top"]: + ax1.axis[an].set_visible(False) + + axis = grid_helper.new_floating_axis(1, 70, axes=ax1, + axis_direction="bottom") + ax1.axis["z"] = axis + axis.toggle(all=True, label=True) + axis.label.set_axis_direction("top") + axis.label.set_text("z = ?") + axis.label.set_visible(True) + axis.line.set_color("0.5") + + ax2 = ax1.get_aux_axes(tr) + + xx, yy = [67, 90, 75, 30], [2, 5, 8, 4] + ax2.scatter(xx, yy) + l, = ax2.plot(xx, yy, "k-") + l.set_clip_path(ax1.patch) From 07ed9c5cdb410a43390124790fdb2e9782e63344 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Thu, 23 Mar 2017 23:06:10 -0400 Subject: [PATCH 14/16] Make axisartist.axis_artist pseudo-tests real. The results seem to be acceptable. --- lib/mpl_toolkits/axisartist/axis_artist.py | 163 ------------------ .../axis_artist.png | Bin 0 -> 10151 bytes .../axis_artist_labelbase.png | Bin 0 -> 10598 bytes .../axis_artist_ticklabels.png | Bin 0 -> 5696 bytes .../axis_artist_ticks.png | Bin 0 -> 5695 bytes .../tests/test_axisartist_axis_artist.py | 97 +++++++++++ 6 files changed, 97 insertions(+), 163 deletions(-) create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_axis_artist/axis_artist.png create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_axis_artist/axis_artist_labelbase.png create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_axis_artist/axis_artist_ticklabels.png create mode 100644 lib/mpl_toolkits/tests/baseline_images/test_axisartist_axis_artist/axis_artist_ticks.png create mode 100644 lib/mpl_toolkits/tests/test_axisartist_axis_artist.py diff --git a/lib/mpl_toolkits/axisartist/axis_artist.py b/lib/mpl_toolkits/axisartist/axis_artist.py index d1a11fc2601e..5e850330dd82 100644 --- a/lib/mpl_toolkits/axisartist/axis_artist.py +++ b/lib/mpl_toolkits/axisartist/axis_artist.py @@ -337,23 +337,6 @@ def draw(self, renderer): gc.restore() -def test_ticks(): - import matplotlib.pyplot as plt - fig = plt.figure(1) - fig.clf() - ax = fig.add_subplot(111) - ax.xaxis.set_visible(False) - ax.yaxis.set_visible(False) - ticks = Ticks(ticksize=10, axis=ax.xaxis) - ax.add_artist(ticks) - locs_angles = [((0.2, 0.), 90), - ((0.4, 0.), 120)] - ticks.set_locs_angles(locs_angles) - plt.draw() - - - - class LabelBase(mtext.Text): """ A base class for AxisLabel and TickLabels. The position and angle @@ -465,33 +448,6 @@ def get_window_extent(self, renderer): return bbox - -def test_labelbase(): - import matplotlib.pyplot as plt - fig = plt.figure(1) - fig.clf() - ax = fig.add_subplot(111) - - ax.plot([0.5], [0.5], "o") - label = LabelBase(0.5, 0.5, "Test") - - a = -90 - label._set_ref_angle(a) - label._set_offset_radius(offset_radius=50) - label.set_rotation(-90) - label.set(ha="center", va="top") - - ax.add_artist(label) - plt.draw() - - - - - - - - - class AxisLabel(LabelBase, AttributeCopier): """ Axis Label. Derived from Text. The position of the text is updated @@ -847,47 +803,6 @@ def get_texts_widths_heights_descents(self, renderer): return whd_list - -def test_ticklabels(): - import matplotlib.pyplot as plt - fig = plt.figure(1) - fig.clf() - ax = fig.add_subplot(111) - ax.xaxis.set_visible(False) - ax.yaxis.set_visible(False) - ax.plot([0.2, 0.4], [0.5, 0.5], "o") - ticks = Ticks(ticksize=10, axis=ax.xaxis) - ax.add_artist(ticks) - locs_angles_labels = [((0.2, 0.5), -90, "0.2"), - ((0.4, 0.5), -120, "0.4")] - tick_locs_angles = [(xy, a+180) for xy, a, l in locs_angles_labels] - ticks.set_locs_angles(tick_locs_angles) - - - ax.plot([0.5], [0.5], ",") - axislabel = AxisLabel(0.5, 0.5, "Test") - axislabel._set_offset_radius(20) - axislabel._set_ref_angle(0) - axislabel.set_axis_direction("bottom") - #axislabel._text_follow_ref_angle = True - #axislabel.set(va="center", ha="right") - ax.add_artist(axislabel) - - if 1: - ticklabels = TickLabels(axis_direction="left") - ticklabels._locs_angles_labels = locs_angles_labels - #ticklabels.set_rotation(90) - ticklabels.set_pad(10) - - ax.add_artist(ticklabels) - - ax.set_xlim(0, 1); ax.set_ylim(0, 1) - - plt.draw() - - - - class GridlinesCollection(LineCollection): def __init__(self, *kl, **kwargs): """ @@ -1611,81 +1526,3 @@ def toggle(self, all=None, ticks=None, ticklabels=None, label=None): self.minor_ticklabels.set_visible(_ticklabels) if _label is not None: self.label.set_visible(_label) - - - - - -def test_axis_artist(): - global axisline - - #self._axislines[loc] = new_fixed_axis(loc=loc, axes=axes) - from mpl_toolkits.axisartist import AxisArtistHelperRectlinear - fig = plt.figure(1) - fig.clf() - ax=fig.add_subplot(111) - ax.xaxis.set_visible(False) - ax.yaxis.set_visible(False) - - if 1: - - _helper = AxisArtistHelperRectlinear.Fixed(ax, loc="left") - axisline = AxisArtist(ax, _helper, offset=None, axis_direction="left") - ax.add_artist(axisline) - _helper = AxisArtistHelperRectlinear.Fixed(ax, loc="right") - axisline = AxisArtist(ax, _helper, offset=None, axis_direction="right") - ax.add_artist(axisline) - - _helper = AxisArtistHelperRectlinear.Fixed(ax, loc="bottom") - axisline = AxisArtist(ax, _helper, offset=None, axis_direction="bottom") - axisline.set_label("TTT") - #axisline.label.set_visible(False) - ax.add_artist(axisline) - - #axisline.major_ticklabels.set_axis_direction("bottom") - axisline.major_ticks.set_tick_out(False) - - ax.set_ylabel("Test") - - axisline.label.set_pad(5) - - - plt.draw() - -def test_axis_artist2(): - global axisline - - #self._axislines[loc] = new_fixed_axis(loc=loc, axes=axes) - from mpl_toolkits.axislines import AxisArtistHelperRectlinear - fig = plt.figure(1) - fig.clf() - ax=fig.add_subplot(111) - ax.xaxis.set_visible(False) - ax.yaxis.set_visible(False) - - - _helper = AxisArtistHelperRectlinear.Fixed(ax, loc="bottom") - axisline = AxisArtist(ax, _helper, offset=None, axis_direction="bottom") - axisline.set_label("TTT") - ax.add_artist(axisline) - - #axisline.major_ticklabels.set_axis_direction("bottom") - axisline.major_ticks.set_tick_out(False) - - - ax.set_ylabel("Test") - - plt.draw() - -if __name__ == "__main__": - #test_labelbase() - #test_ticklabels() - test_axis_artist() - #test_axis_artist2() - - -# DONE -# *. ticks, ticklabels, axislabels -# *. workon axisartist - -# TODO diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_axis_artist/axis_artist.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_axis_artist/axis_artist.png new file mode 100644 index 0000000000000000000000000000000000000000..29ddf31eb6646ded502f65e49b5661b638ed6edd GIT binary patch literal 10151 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/baseline_images/test_axisartist_axis_artist/axis_artist_labelbase.png b/lib/mpl_toolkits/tests/baseline_images/test_axisartist_axis_artist/axis_artist_labelbase.png new file mode 100644 index 0000000000000000000000000000000000000000..5d362e77906971ae8ea1ac64bfe97ebf096e4e68 GIT binary patch literal 10598 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 literal 0 HcmV?d00001 diff --git a/lib/mpl_toolkits/tests/test_axisartist_axis_artist.py b/lib/mpl_toolkits/tests/test_axisartist_axis_artist.py new file mode 100644 index 000000000000..95b701a10c07 --- /dev/null +++ b/lib/mpl_toolkits/tests/test_axisartist_axis_artist.py @@ -0,0 +1,97 @@ +from __future__ import (absolute_import, division, print_function, + unicode_literals) + +import matplotlib.pyplot as plt +from matplotlib.testing.decorators import image_comparison + +from mpl_toolkits.axisartist import AxisArtistHelperRectlinear +from mpl_toolkits.axisartist.axis_artist import (AxisArtist, AxisLabel, + LabelBase, Ticks, TickLabels) + + +@image_comparison(baseline_images=['axis_artist_ticks'], + extensions=['png'], style='default') +def test_ticks(): + fig, ax = plt.subplots() + + ax.xaxis.set_visible(False) + ax.yaxis.set_visible(False) + + locs_angles = [((i / 10, 0.0), i * 30) for i in range(-1, 12)] + + ticks_in = Ticks(ticksize=10, axis=ax.xaxis) + ticks_in.set_locs_angles(locs_angles) + ax.add_artist(ticks_in) + + ticks_out = Ticks(ticksize=10, tick_out=True, color='C3', axis=ax.xaxis) + ticks_out.set_locs_angles(locs_angles) + ax.add_artist(ticks_out) + + +@image_comparison(baseline_images=['axis_artist_labelbase'], + extensions=['png'], style='default') +def test_labelbase(): + fig, ax = plt.subplots() + + ax.plot([0.5], [0.5], "o") + + label = LabelBase(0.5, 0.5, "Test") + label._set_ref_angle(-90) + label._set_offset_radius(offset_radius=50) + label.set_rotation(-90) + label.set(ha="center", va="top") + ax.add_artist(label) + + +@image_comparison(baseline_images=['axis_artist_ticklabels'], + extensions=['png'], style='default') +def test_ticklabels(): + fig, ax = plt.subplots() + + ax.xaxis.set_visible(False) + ax.yaxis.set_visible(False) + + ax.plot([0.2, 0.4], [0.5, 0.5], "o") + + ticks = Ticks(ticksize=10, axis=ax.xaxis) + ax.add_artist(ticks) + locs_angles_labels = [((0.2, 0.5), -90, "0.2"), + ((0.4, 0.5), -120, "0.4")] + tick_locs_angles = [(xy, a + 180) for xy, a, l in locs_angles_labels] + ticks.set_locs_angles(tick_locs_angles) + + ticklabels = TickLabels(axis_direction="left") + ticklabels._locs_angles_labels = locs_angles_labels + ticklabels.set_pad(10) + ax.add_artist(ticklabels) + + ax.plot([0.5], [0.5], "s") + axislabel = AxisLabel(0.5, 0.5, "Test") + axislabel._set_offset_radius(20) + axislabel._set_ref_angle(0) + axislabel.set_axis_direction("bottom") + ax.add_artist(axislabel) + + ax.set_xlim(0, 1) + ax.set_ylim(0, 1) + + +@image_comparison(baseline_images=['axis_artist'], + extensions=['png'], style='default') +def test_axis_artist(): + fig, ax = plt.subplots() + + ax.xaxis.set_visible(False) + ax.yaxis.set_visible(False) + + for loc in ('left', 'right', 'bottom'): + _helper = AxisArtistHelperRectlinear.Fixed(ax, loc=loc) + axisline = AxisArtist(ax, _helper, offset=None, axis_direction=loc) + ax.add_artist(axisline) + + # Settings for bottom AxisArtist. + axisline.set_label("TTT") + axisline.major_ticks.set_tick_out(False) + axisline.label.set_pad(5) + + ax.set_ylabel("Test") From 9488d1c82da00c04f6f4c5e2805175370c966fd7 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Mon, 5 Feb 2018 20:31:09 -0500 Subject: [PATCH 15/16] Make axisartist.grid_finder pseudo-tests real. --- lib/mpl_toolkits/axisartist/grid_finder.py | 9 --------- .../tests/test_axisartist_grid_finder.py | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 9 deletions(-) create mode 100644 lib/mpl_toolkits/tests/test_axisartist_grid_finder.py diff --git a/lib/mpl_toolkits/axisartist/grid_finder.py b/lib/mpl_toolkits/axisartist/grid_finder.py index 4619b740c188..62a94b147835 100644 --- a/lib/mpl_toolkits/axisartist/grid_finder.py +++ b/lib/mpl_toolkits/axisartist/grid_finder.py @@ -338,12 +338,3 @@ def __call__(self, direction, factor, values): r = [self._format_dict.get(k, v) for k, v in zip(values, fallback_strings)] return r - - -if __name__ == "__main__": - locator = MaxNLocator() - locs, nloc, factor = locator(0, 100) - - fmt = FormatterPrettyPrint() - - print(fmt("left", None, locs)) diff --git a/lib/mpl_toolkits/tests/test_axisartist_grid_finder.py b/lib/mpl_toolkits/tests/test_axisartist_grid_finder.py new file mode 100644 index 000000000000..5305060366a5 --- /dev/null +++ b/lib/mpl_toolkits/tests/test_axisartist_grid_finder.py @@ -0,0 +1,16 @@ +from __future__ import (absolute_import, division, print_function, + unicode_literals) + +from mpl_toolkits.axisartist.grid_finder import ( + FormatterPrettyPrint, + MaxNLocator) + + +def test_pretty_print_format(): + locator = MaxNLocator() + locs, nloc, factor = locator(0, 100) + + fmt = FormatterPrettyPrint() + + assert fmt("left", None, locs) == \ + [r'$\mathdefault{%d}$' % (l, ) for l in locs] From b6143163d57627358450ee5b22b219b7b6fb4c32 Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Tue, 6 Feb 2018 02:58:06 -0500 Subject: [PATCH 16/16] Fix minor typos. --- lib/mpl_toolkits/axisartist/angle_helper.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mpl_toolkits/axisartist/angle_helper.py b/lib/mpl_toolkits/axisartist/angle_helper.py index fe4f446bb113..4ca0a93fc81c 100644 --- a/lib/mpl_toolkits/axisartist/angle_helper.py +++ b/lib/mpl_toolkits/axisartist/angle_helper.py @@ -218,7 +218,7 @@ class FormatterDMS(object): fmt_d = "$%d" + deg_mark + "$" fmt_ds = r"$%d.%s" + deg_mark + "$" - # %s for signe + # %s for sign fmt_d_m = r"$%s%d" + deg_mark + "\,%02d" + min_mark + "$" fmt_d_ms = r"$%s%d" + deg_mark + "\,%02d.%s" + min_mark + "$" @@ -324,7 +324,7 @@ class FormatterHMS(FormatterDMS): fmt_d = "$%d" + deg_mark + "$" fmt_ds = r"$%d.%s" + deg_mark + "$" - # %s for signe + # %s for sign fmt_d_m = r"$%s%d" + deg_mark + "\,%02d" + min_mark+"$" fmt_d_ms = r"$%s%d" + deg_mark + "\,%02d.%s" + min_mark+"$"