From a524fd7cd6714f6c36a92ff5c72eca723795f863 Mon Sep 17 00:00:00 2001 From: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com> Date: Thu, 1 Nov 2018 10:48:10 +0100 Subject: [PATCH 1/3] Workaround Text3D breaking tight_layout() --- lib/mpl_toolkits/mplot3d/art3d.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index 7777b66c14de..d5899f1b180a 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -113,6 +113,10 @@ def draw(self, renderer): mtext.Text.draw(self, renderer) self.stale = False + def get_tightbbox(self, renderer): + # Overwriting the 2d Text behavior which is not valid for 3d. + # For now, just return None to exclude from layout calculation. + return None def text_2d_to_3d(obj, z=0, zdir='z'): """Convert a Text to a Text3D object.""" From d1b16c3a8c6a2980d03c8bba4b3c9c74b73f26d0 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Thu, 1 Nov 2018 16:58:15 +0100 Subject: [PATCH 2/3] PEP8 fix --- lib/mpl_toolkits/mplot3d/art3d.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index d5899f1b180a..6734bc6fe45d 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -118,6 +118,7 @@ def get_tightbbox(self, renderer): # For now, just return None to exclude from layout calculation. return None + def text_2d_to_3d(obj, z=0, zdir='z'): """Convert a Text to a Text3D object.""" obj.__class__ = Text3D From 1a5a2cb5b915594b92f530f6b37ebf3d638fbb6c Mon Sep 17 00:00:00 2001 From: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com> Date: Thu, 1 Nov 2018 18:04:17 +0100 Subject: [PATCH 3/3] Fix PEP8 flake8 --- lib/mpl_toolkits/mplot3d/art3d.py | 2 +- lib/mpl_toolkits/tests/test_mplot3d.py | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/mpl_toolkits/mplot3d/art3d.py b/lib/mpl_toolkits/mplot3d/art3d.py index 6734bc6fe45d..8a04fe6c001f 100644 --- a/lib/mpl_toolkits/mplot3d/art3d.py +++ b/lib/mpl_toolkits/mplot3d/art3d.py @@ -118,7 +118,7 @@ def get_tightbbox(self, renderer): # For now, just return None to exclude from layout calculation. return None - + def text_2d_to_3d(obj, z=0, zdir='z'): """Convert a Text to a Text3D object.""" obj.__class__ = Text3D diff --git a/lib/mpl_toolkits/tests/test_mplot3d.py b/lib/mpl_toolkits/tests/test_mplot3d.py index 30f008a5fa30..34fe4eaafb2a 100644 --- a/lib/mpl_toolkits/tests/test_mplot3d.py +++ b/lib/mpl_toolkits/tests/test_mplot3d.py @@ -2,7 +2,7 @@ from mpl_toolkits.mplot3d import Axes3D, axes3d, proj3d, art3d from matplotlib import cm -from matplotlib.testing.decorators import image_comparison +from matplotlib.testing.decorators import image_comparison, check_figures_equal from matplotlib.collections import LineCollection from matplotlib.patches import Circle import matplotlib.pyplot as plt @@ -163,6 +163,19 @@ def f(t): ax.set_zlim3d(-1, 1) +@check_figures_equal(extensions=['png']) +def test_tight_layout_text(fig_test, fig_ref): + # text is currently ignored in tight layout. So the order of text() and + # tight_layout() calls should not influence the result. + ax1 = fig_test.gca(projection='3d') + ax1.text(.5, .5, .5, s='some string') + fig_test.tight_layout() + + ax2 = fig_ref.gca(projection='3d') + fig_ref.tight_layout() + ax2.text(.5, .5, .5, s='some string') + + @image_comparison(baseline_images=['scatter3d'], remove_text=True) def test_scatter3d(): fig = plt.figure()