Skip to content

Commit 592c49b

Browse files
farizatacaswell
authored andcommitted
figure attribute and canvas property
1 parent 73e1122 commit 592c49b

File tree

1 file changed

+24
-7
lines changed

1 file changed

+24
-7
lines changed

lib/matplotlib/backend_managers.py

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ class FigureManager(cbook.EventEmitter):
6161
canvas : `matplotlib.backend_bases.FigureCanvasBase`
6262
The GUI element on which we draw.
6363
64+
figure : `matplotlib.figure.Figure`
65+
The figure that holds the canvas
66+
6467
toolbar : `matplotlib.backend_bases.NavigationToolbar2`
6568
The toolbar used for interacting with the figure.
6669
@@ -79,14 +82,15 @@ def __init__(self, figure, num):
7982
self.window = self._backend.Window('Figure %d' % num)
8083
self.window.mpl_connect('window_destroy_event', self.destroy)
8184

82-
self.canvas = self._backend.FigureCanvas(figure, manager=self)
85+
self._figure = None
86+
self._set_figure(figure)
8387

84-
w = int(self.canvas.figure.bbox.width)
85-
h = int(self.canvas.figure.bbox.height)
88+
w = int(self.figure.bbox.width)
89+
h = int(self.figure.bbox.height)
8690

87-
self.window.add_element(self.canvas, True, 'center')
91+
self.window.add_element(self.figure.canvas, True, 'center')
8892

89-
self.toolmanager = ToolManager(self.canvas.figure)
93+
self.toolmanager = ToolManager(self.figure)
9094
self.toolbar = self._get_toolbar()
9195

9296
tools.add_tools_to_manager(self.toolmanager)
@@ -108,7 +112,20 @@ def notify_axes_change(fig):
108112
'this will be called whenever the current axes is changed'
109113
if self.toolmanager is None and self.toolbar is not None:
110114
self.toolbar.update()
111-
self.canvas.figure.add_axobserver(notify_axes_change)
115+
self.figure.add_axobserver(notify_axes_change)
116+
117+
@property
118+
def figure(self):
119+
return self._figure
120+
121+
def _set_figure(self, figure):
122+
if not figure.canvas:
123+
self._backend.FigureCanvas(figure, manager=self)
124+
self._figure = figure
125+
126+
@property
127+
def canvas(self):
128+
return self._figure.canvas
112129

113130
def destroy(self, *args):
114131
"""Called to destroy this FigureManager.
@@ -120,7 +137,7 @@ def destroy(self, *args):
120137
return
121138

122139
self._destroying = True
123-
self.canvas.destroy()
140+
self.figure.canvas.destroy()
124141
if self.toolbar:
125142
self.toolbar.destroy()
126143
self.window.destroy()

0 commit comments

Comments
 (0)