From d20ea496fb7682cd24e9c94eb01c3c086c06b249 Mon Sep 17 00:00:00 2001 From: Thomas A Caswell Date: Sun, 12 Jan 2020 00:25:58 -0500 Subject: [PATCH] MNT: set default canvas when un-pickling In 380c531d58dd0dacbd303f06f2c2d3711eee1ff4 / #12450 we set the default canvas on Figure `__init__` to FigureCanvasBase but were still setting it to `None` in `__setstate__`. --- 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 59731b4552c5..be08bb36d85e 100644 --- a/lib/matplotlib/figure.py +++ b/lib/matplotlib/figure.py @@ -1999,7 +1999,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