From 247689ddce6e13849d383d7d11635c4c1ad706a1 Mon Sep 17 00:00:00 2001 From: Cimarron Mittelsteadt Date: Tue, 30 Apr 2013 12:20:21 -0700 Subject: [PATCH 1/3] Fixes issue #1960. Account for right/top spine data offset on transform when doing spine.set_position(). Also includes a testcase for the data locations. --- lib/matplotlib/spines.py | 2 + .../test_spines/spines_data_positions.pdf | Bin 0 -> 5078 bytes .../test_spines/spines_data_positions.png | Bin 0 -> 13804 bytes .../test_spines/spines_data_positions.svg | 544 ++++++++++++++++++ lib/matplotlib/tests/test_spines.py | 11 + 5 files changed, 557 insertions(+) create mode 100644 lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.png create mode 100644 lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.svg diff --git a/lib/matplotlib/spines.py b/lib/matplotlib/spines.py index 55bc58462e1f..ba8682bab7f6 100644 --- a/lib/matplotlib/spines.py +++ b/lib/matplotlib/spines.py @@ -323,6 +323,8 @@ def _calc_offset_transform(self): self._spine_transform = ('identity', mtransforms.IdentityTransform()) elif position_type == 'data': + if self.spine_type in ('right', 'top'): + amount -= 1 # translate left by one to account for right/top data offset of one if self.spine_type in ('left', 'right'): self._spine_transform = ('data', mtransforms.Affine2D().translate( diff --git a/lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.pdf b/lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.pdf new file mode 100644 index 0000000000000000000000000000000000000000..38355c76df3ceafcaaf200433c47baea28f40b21 GIT binary patch literal 5078 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.png b/lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.png new file mode 100644 index 0000000000000000000000000000000000000000..024b243fa59ad92753b29fb4af97e0b06d17bee0 GIT binary patch literal 13804 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.svg b/lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.svg new file mode 100644 index 000000000000..5cfd7b161136 --- /dev/null +++ b/lib/matplotlib/tests/baseline_images/test_spines/spines_data_positions.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/matplotlib/tests/test_spines.py b/lib/matplotlib/tests/test_spines.py index 9674215dac99..82046706af55 100644 --- a/lib/matplotlib/tests/test_spines.py +++ b/lib/matplotlib/tests/test_spines.py @@ -19,3 +19,14 @@ def test_spines_axes_positions(): ax.xaxis.set_ticks_position('top') ax.spines['left'].set_color('none') ax.spines['bottom'].set_color('none') + +@image_comparison(baseline_images=['spines_data_positions']) +def test_spines_data_positions(): + fig = plt.figure() + ax = fig.add_subplot(1,1,1) + ax.spines['left'].set_position(('data', -1.5)) + ax.spines['top'].set_position(('data', 0.5)) + ax.spines['right'].set_position(('data', -0.5)) + ax.spines['bottom'].set_position('zero') + ax.set_xlim([-2,2]) + ax.set_ylim([-2,2]) \ No newline at end of file From c1546748d3269f34b061925f03672b8a0b64bea6 Mon Sep 17 00:00:00 2001 From: Cimarron Mittelsteadt Date: Wed, 1 May 2013 08:15:51 -0700 Subject: [PATCH 2/3] Improved comment for data spine transform adjustment - taken from mdboom. --- lib/matplotlib/spines.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/spines.py b/lib/matplotlib/spines.py index ba8682bab7f6..d0b7a26d1dfa 100644 --- a/lib/matplotlib/spines.py +++ b/lib/matplotlib/spines.py @@ -324,7 +324,10 @@ def _calc_offset_transform(self): mtransforms.IdentityTransform()) elif position_type == 'data': if self.spine_type in ('right', 'top'): - amount -= 1 # translate left by one to account for right/top data offset of one + # The right and top spines have a default position of 1 in + # axes coordinates. When specifying the position in data + # coordinates, we need to calculate the position relative to 0. + amount -= 1 if self.spine_type in ('left', 'right'): self._spine_transform = ('data', mtransforms.Affine2D().translate( From 6f45b4325af6f4399b9f0d230d6b7f8865e33bcb Mon Sep 17 00:00:00 2001 From: Cimarron Mittelsteadt Date: Thu, 2 May 2013 08:34:52 -0700 Subject: [PATCH 3/3] Added bullet to api_changes documentation on PR #1964 --- doc/api/api_changes.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/api/api_changes.rst b/doc/api/api_changes.rst index 0ed2dd87a796..98aa4873605a 100644 --- a/doc/api/api_changes.rst +++ b/doc/api/api_changes.rst @@ -15,6 +15,10 @@ For new features that were added to matplotlib, please see Changes in 1.3.x ================ +* Fixed a bug in setting the position for the right/top spine with data + position type. Previously, it would draw the right or top spine at + +1 data offset. + * In :class:`~matplotlib.patches.FancyArrow`, the default arrow head width, ``head_width``, has been made larger to produce a visible arrow head. The new value of this kwarg is ``head_width = 20 * width``.