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] pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy