From 96ac546c0aaff36758ed24d2d9ff523fc1b44a60 Mon Sep 17 00:00:00 2001 From: Jae-Joon Lee Date: Mon, 27 Aug 2012 23:11:24 +0900 Subject: [PATCH 1/2] for interpolation='none', the affine matrix is calculated in the display coordinate --- lib/matplotlib/image.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/image.py b/lib/matplotlib/image.py index 0c50fa460d54..02ac47fbdf36 100644 --- a/lib/matplotlib/image.py +++ b/lib/matplotlib/image.py @@ -25,7 +25,7 @@ # the image namespace: from matplotlib._image import * -from matplotlib.transforms import BboxBase, Bbox +from matplotlib.transforms import BboxBase, Bbox, IdentityTransform import matplotlib.transforms as mtransforms @@ -270,8 +270,8 @@ def _draw_unsampled_image(self, renderer, gc): # firs, convert the image extent to the ic x_llc, x_trc, y_llc, y_trc = self.get_extent() - xy = trans.transform_non_affine(np.array([(x_llc, y_llc), - (x_trc, y_trc)])) + xy = trans.transform(np.array([(x_llc, y_llc), + (x_trc, y_trc)])) _xx1, _yy1 = xy[0] _xx2, _yy2 = xy[1] @@ -283,15 +283,16 @@ def _draw_unsampled_image(self, renderer, gc): if self._image_skew_coordinate: # skew the image when required. x_lrc, y_lrc = self._image_skew_coordinate - xy2 = trans.transform_non_affine(np.array([(x_lrc, y_lrc)])) + xy2 = trans.transform(np.array([(x_lrc, y_lrc)])) _xx3, _yy3 = xy2[0] tr_rotate_skew = self._get_rotate_and_skew_transform(_xx1, _yy1, _xx2, _yy2, _xx3, _yy3) - trans_ic_to_canvas = tr_rotate_skew+trans.get_affine() + trans_ic_to_canvas = tr_rotate_skew else: - trans_ic_to_canvas = trans.get_affine() + trans_ic_to_canvas = IdentityTransform() + # Now, viewLim in the ic. It can be rotated and can be # skewed. Make it big enough. From 46cd29aa92d750f37699b0ca2b81ec411c187676 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 4 Sep 2012 12:16:17 -0400 Subject: [PATCH 2/2] Add test for #1150. --- .../test_image/image_shift.pdf | Bin 0 -> 5527 bytes .../test_image/image_shift.svg | 206 ++++++++++++++++++ lib/matplotlib/tests/test_image.py | 15 ++ 3 files changed, 221 insertions(+) create mode 100644 lib/matplotlib/tests/baseline_images/test_image/image_shift.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_image/image_shift.svg diff --git a/lib/matplotlib/tests/baseline_images/test_image/image_shift.pdf b/lib/matplotlib/tests/baseline_images/test_image/image_shift.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f9fdc183ae957b200fe07ef55df07c8c46945a29 GIT binary patch literal 5527 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/matplotlib/tests/test_image.py b/lib/matplotlib/tests/test_image.py index 4556013bc4cb..587fd94c5618 100644 --- a/lib/matplotlib/tests/test_image.py +++ b/lib/matplotlib/tests/test_image.py @@ -160,6 +160,21 @@ def test_no_interpolation_origin(): ax = fig.add_subplot(212) ax.imshow(np.arange(100).reshape((2, 50)), interpolation='none') +@image_comparison(baseline_images=['image_shift'], remove_text=True, + extensions=['pdf', 'svg']) +def test_image_shift(): + from matplotlib.colors import LogNorm + + imgData = [[1.0/(x) + 1.0/(y) for x in range(1,100)] for y in range(1,100)] + tMin=734717.945208 + tMax=734717.946366 + + fig = plt.figure() + ax = fig.add_subplot(111) + ax.imshow(imgData, norm=LogNorm(), interpolation='none', + extent=(tMin, tMax, 1, 100)) + ax.set_aspect('auto') + if __name__=='__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False)