diff --git a/lib/matplotlib/image.py b/lib/matplotlib/image.py index 0602fae17c8d..ea2331cb48a7 100644 --- a/lib/matplotlib/image.py +++ b/lib/matplotlib/image.py @@ -1117,11 +1117,20 @@ def get_extent(self): -0.5 + self.oy, numrows-0.5 + self.oy) def make_image(self, renderer, magnification=1.0, unsampled=False): - bbox = Bbox([[self.ox, self.oy], - [self.ox + self._A.shape[1], self.oy + self._A.shape[0]]]) - clip = Bbox([[0, 0], [renderer.width, renderer.height]]) + fac = renderer.dpi/self.figure.dpi + # fac here is to account for pdf, eps, svg backends where + # figure.dpi is set to 72. This means we need to scale the + # image (using magification) and offset it appropriately. + bbox = Bbox([[self.ox/fac, self.oy/fac], + [(self.ox/fac + self._A.shape[1]), + (self.oy/fac + self._A.shape[0])]]) + width, height = self.figure.get_size_inches() + width *= renderer.dpi + height *= renderer.dpi + clip = Bbox([[0, 0], [width, height]]) + return self._make_image( - self._A, bbox, bbox, clip, magnification=magnification, + self._A, bbox, bbox, clip, magnification=magnification / fac, unsampled=unsampled, round_to_pixel_border=False) def set_data(self, A): diff --git a/lib/matplotlib/tests/baseline_images/test_image/figimage-0.pdf b/lib/matplotlib/tests/baseline_images/test_image/figimage-0.pdf new file mode 100644 index 000000000000..53b98a11d5cb Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_image/figimage-0.pdf differ diff --git a/lib/matplotlib/tests/baseline_images/test_image/figimage-1.pdf b/lib/matplotlib/tests/baseline_images/test_image/figimage-1.pdf new file mode 100644 index 000000000000..53b98a11d5cb Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_image/figimage-1.pdf differ diff --git a/lib/matplotlib/tests/test_image.py b/lib/matplotlib/tests/test_image.py index ba4e2dd80f99..68a22894ec7b 100644 --- a/lib/matplotlib/tests/test_image.py +++ b/lib/matplotlib/tests/test_image.py @@ -72,22 +72,36 @@ def test_interp_nearest_vs_none(): ax2.set_title('interpolation nearest') -@image_comparison(baseline_images=['figimage-0', 'figimage-1'], extensions=['png']) -def test_figimage(): +def do_figimage(suppressComposite): + """ Helper for the next two tests """ + fig = plt.figure(figsize=(2,2), dpi=100) + fig.suppressComposite = suppressComposite + x,y = np.ix_(np.arange(100.0)/100.0, np.arange(100.0)/100.0) + z = np.sin(x**2 + y**2 - x*y) + c = np.sin(20*x**2 + 50*y**2) + img = z + c/5 + + fig.figimage(img, xo=0, yo=0, origin='lower') + fig.figimage(img[::-1,:], xo=0, yo=100, origin='lower') + fig.figimage(img[:,::-1], xo=100, yo=0, origin='lower') + fig.figimage(img[::-1,::-1], xo=100, yo=100, origin='lower') + +@image_comparison(baseline_images=['figimage-0'], + extensions=['png','pdf']) +def test_figimage0(): 'test the figimage method' - for suppressComposite in False, True: - fig = plt.figure(figsize=(2,2), dpi=100) - fig.suppressComposite = suppressComposite - x,y = np.ix_(np.arange(100.0)/100.0, np.arange(100.0)/100.0) - z = np.sin(x**2 + y**2 - x*y) - c = np.sin(20*x**2 + 50*y**2) - img = z + c/5 - - fig.figimage(img, xo=0, yo=0, origin='lower') - fig.figimage(img[::-1,:], xo=0, yo=100, origin='lower') - fig.figimage(img[:,::-1], xo=100, yo=0, origin='lower') - fig.figimage(img[::-1,::-1], xo=100, yo=100, origin='lower') + suppressComposite = False + do_figimage(suppressComposite) + + +@image_comparison(baseline_images=['figimage-1'], + extensions=['png','pdf']) +def test_figimage1(): + 'test the figimage method' + suppressComposite = True + do_figimage(suppressComposite) + def test_image_python_io(): fig = plt.figure()