From d497f85283f4b91a6fe4b47d4a84f70f54bb3bd7 Mon Sep 17 00:00:00 2001 From: Eric Firing Date: Mon, 13 Jan 2020 10:57:04 -1000 Subject: [PATCH] Backport PR #16189: MNT: set default canvas when un-pickling --- lib/matplotlib/figure.py | 2 +- lib/matplotlib/tests/test_pickle.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/figure.py b/lib/matplotlib/figure.py index 46e3b755271b..901408121eaa 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -2026,7 +2026,7 @@ def __setstate__(self, state): # re-initialise some of the unstored state information self._axobservers = [] - self.canvas = None + FigureCanvasBase(self) # Set self.canvas. self._layoutbox = None if restore_to_pylab: diff --git a/lib/matplotlib/tests/test_pickle.py b/lib/matplotlib/tests/test_pickle.py index 17687092416e..0fad3cdf2e7b 100644 --- a/lib/matplotlib/tests/test_pickle.py +++ b/lib/matplotlib/tests/test_pickle.py @@ -10,6 +10,7 @@ from matplotlib.dates import rrulewrapper import matplotlib.pyplot as plt import matplotlib.transforms as mtransforms +import matplotlib.figure as mfigure def test_simple(): @@ -194,3 +195,13 @@ def test_shared(): @pytest.mark.parametrize("cmap", cm.cmap_d.values()) def test_cmap(cmap): pickle.dumps(cmap) + + +def test_unpickle_canvas(): + fig = mfigure.Figure() + assert fig.canvas is not None + out = BytesIO() + pickle.dump(fig, out) + out.seek(0) + fig2 = pickle.load(out) + assert fig2.canvas is not None