From edd463b07b1b97ab2273559cdb032ab4f485603d Mon Sep 17 00:00:00 2001 From: Phil Elson Date: Mon, 18 Mar 2019 19:35:38 +0000 Subject: [PATCH 1/2] Backport PR #13021: Undesirable behaviour of MixedModeRenderer --- lib/matplotlib/backends/backend_mixed.py | 35 ++++++------------ .../test_agg_filter/agg_filter_alpha.pdf | Bin 0 -> 10026 bytes .../test_agg_filter/agg_filter_alpha.png | Bin 0 -> 18410 bytes lib/matplotlib/tests/test_agg_filter.py | 29 +++++++++++++++ 4 files changed, 41 insertions(+), 23 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_agg_filter/agg_filter_alpha.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_agg_filter/agg_filter_alpha.png create mode 100644 lib/matplotlib/tests/test_agg_filter.py diff --git a/lib/matplotlib/backends/backend_mixed.py b/lib/matplotlib/backends/backend_mixed.py index 7bfc51bceb2e..575030a45b67 100644 --- a/lib/matplotlib/backends/backend_mixed.py +++ b/lib/matplotlib/backends/backend_mixed.py @@ -62,27 +62,16 @@ def __init__(self, figure, width, height, dpi, vector_renderer, self._bbox_inches_restore = bbox_inches_restore - self._set_current_renderer(vector_renderer) - - _methods = """ - close_group draw_image draw_markers draw_path - draw_path_collection draw_quad_mesh draw_tex draw_text - finalize flipy get_canvas_width_height get_image_magnification - get_texmanager get_text_width_height_descent new_gc open_group - option_image_nocomposite points_to_pixels strip_math - start_filter stop_filter draw_gouraud_triangle - draw_gouraud_triangles option_scale_image - _text2path _get_text_path_transform height width - """.split() - - def _set_current_renderer(self, renderer): - self._renderer = renderer - - for method in self._methods: - if hasattr(renderer, method): - setattr(self, method, getattr(renderer, method)) - renderer.start_rasterizing = self.start_rasterizing - renderer.stop_rasterizing = self.stop_rasterizing + self._renderer = vector_renderer + + def __getattr__(self, attr): + # Proxy everything that hasn't been overridden to the base + # renderer. Things that *are* overridden can call methods + # on self._renderer directly, but must not cache/store + # methods (because things like RendererAgg change their + # methods on the fly in order to optimise proxying down + # to the underlying C implementation). + return getattr(self._renderer, attr) def start_rasterizing(self): """ @@ -105,7 +94,7 @@ def start_rasterizing(self): if self._rasterizing == 0: self._raster_renderer = self._raster_renderer_class( self._width*self.dpi, self._height*self.dpi, self.dpi) - self._set_current_renderer(self._raster_renderer) + self._renderer = self._raster_renderer self._rasterizing += 1 def stop_rasterizing(self): @@ -119,7 +108,7 @@ def stop_rasterizing(self): """ self._rasterizing -= 1 if self._rasterizing == 0: - self._set_current_renderer(self._vector_renderer) + self._renderer = self._vector_renderer height = self._height * self.dpi buffer, bounds = self._raster_renderer.tostring_rgba_minimized() diff --git a/lib/matplotlib/tests/baseline_images/test_agg_filter/agg_filter_alpha.pdf b/lib/matplotlib/tests/baseline_images/test_agg_filter/agg_filter_alpha.pdf new file mode 100644 index 0000000000000000000000000000000000000000..46275f180bc42322cb34ab426bb76d2269806451 GIT binary patch literal 10026 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_agg_filter/agg_filter_alpha.png b/lib/matplotlib/tests/baseline_images/test_agg_filter/agg_filter_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..dce047707da8c5324f0a94cf68bdec09666442ea GIT binary patch literal 18410 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 OKwnY2oPWvG@Bacepsu3; literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_agg_filter.py b/lib/matplotlib/tests/test_agg_filter.py new file mode 100644 index 000000000000..419071b1a453 --- /dev/null +++ b/lib/matplotlib/tests/test_agg_filter.py @@ -0,0 +1,29 @@ +import numpy as np + +import matplotlib.pyplot as plt +from matplotlib.testing.decorators import image_comparison + + +@image_comparison(baseline_images=['agg_filter_alpha']) +def test_agg_filter_alpha(): + ax = plt.axes() + x, y = np.mgrid[0:7, 0:8] + data = x**2 - y**2 + mesh = ax.pcolormesh(data, cmap='Reds', zorder=5) + + def manual_alpha(im, dpi): + im[:, :, 3] *= 0.6 + print('CALLED') + return im, 0, 0 + + # Note: Doing alpha like this is not the same as setting alpha on + # the mesh itself. Currently meshes are drawn as independent patches, + # and we see fine borders around the blocks of color. See the SO + # question for an example: https://stackoverflow.com/questions/20678817 + mesh.set_agg_filter(manual_alpha) + + # Currently we must enable rasterization for this to have an effect in + # the PDF backend. + mesh.set_rasterized(True) + + ax.plot([0, 4, 7], [1, 3, 8]) From 9e0e738d4b51872b8d1e711a23c71abcad9a7421 Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Tue, 19 Mar 2019 10:14:50 +0100 Subject: [PATCH 2/2] Merge pull request #13710 from tacaswell/tst_fix_aggfilter_test TST: only test agg_filter extensions with baseline images --- lib/matplotlib/tests/test_agg_filter.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/tests/test_agg_filter.py b/lib/matplotlib/tests/test_agg_filter.py index 419071b1a453..913034636603 100644 --- a/lib/matplotlib/tests/test_agg_filter.py +++ b/lib/matplotlib/tests/test_agg_filter.py @@ -4,7 +4,8 @@ from matplotlib.testing.decorators import image_comparison -@image_comparison(baseline_images=['agg_filter_alpha']) +@image_comparison(baseline_images=['agg_filter_alpha'], + extensions=['png', 'pdf']) def test_agg_filter_alpha(): ax = plt.axes() x, y = np.mgrid[0:7, 0:8]