From 2423cba45ad01410664dd6f675d916d25376f061 Mon Sep 17 00:00:00 2001 From: Importance of Being Ernest Date: Fri, 15 Dec 2017 00:45:38 +0100 Subject: [PATCH] Allow rasterization for 3D plots 3D plots do not allow for rasterization. It seems this is only due to the missing decorator (`@allow_rasterization`) of the respecive `draw` methods. In this patch I'm adding the decorator to all draw methods in `art3d.py` to see what happens. This would allow to rasterize 3D objects, like ``` from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.gca(projection=Axes3D.name) x = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(x, x) Z = np.sin(np.sqrt(X**2 + Y**2)) surf = ax.plot_surface(X, Y, Z, cmap="coolwarm", linewidth=0, antialiased=True) surf.set_rasterized(True) plt.savefig("rasterizedsurface.pdf") plt.show() ``` resulting in (screenshot from pdf): --- lib/mpl_toolkits/mplot3d/art3d.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index 3e9785813210..67be03dba347 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -22,6 +22,7 @@ from matplotlib.patches import Patch from matplotlib.colors import Normalize from matplotlib.cbook import iterable +from matplotlib.artist import allow_rasterization import warnings import numpy as np @@ -82,6 +83,7 @@ def set_3d_properties(self, z=0, zdir='z'): self._dir_vec = get_dir_vector(zdir) self.stale = True + @allow_rasterization def draw(self, renderer): proj = proj3d.proj_trans_points([self._position3d, \ self._position3d + self._dir_vec], renderer.M) @@ -130,6 +132,7 @@ def set_3d_properties(self, zs=0, zdir='z'): self._verts3d = juggle_axes(xs, ys, zs, zdir) self.stale = True + @allow_rasterization def draw(self, renderer): xs3d, ys3d, zs3d = self._verts3d xs, ys, zs = proj3d.proj_transform(xs3d, ys3d, zs3d, renderer.M) @@ -235,6 +238,7 @@ def do_3d_projection(self, renderer): minz = min(minz, min(zs)) return minz + @allow_rasterization def draw(self, renderer, project=False): if project: self.do_3d_projection(renderer) @@ -280,6 +284,7 @@ def do_3d_projection(self, renderer): self._facecolor2d = self._facecolor3d return min(vzs) + @allow_rasterization def draw(self, renderer): Patch.draw(self, renderer) @@ -706,6 +711,7 @@ def get_edgecolors(self): return self._edgecolors2d get_edgecolor = get_edgecolors + @allow_rasterization def draw(self, renderer): return Collection.draw(self, renderer) 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