docs: def make_canvas_frame(self):
          """ Create the data and thematic map images for the first time """
  
          self.fig, (self.imageax, self.previewax) = plt.subplots(ncols=2,
                                                                  figsize=self.canvas_size,
                                                                  sharex=True, sharey=True,
                                                                  gridspec_kw=self.subplot_grid_spec)
          self.canvas = FigureCanvasTkAgg(self.fig, master=self.canvas_frame)
          self.canvas.mpl_connect('button_press_event', self.onclick)
          self.canvas.mpl_connect('key_press_event', self.onpress)
  
          # set up the channel data view
          self.configure_threecolor_image()
          self.imageplot = self.imageax.imshow(self.image)
          self.imageax.set_xlim([0, self.shape[0]])
          self.imageax.set_ylim([0, self.shape[0]])
          self.imageax.set_axis_off()
          self.history.append(self.selection_array)
          cmap = self.config.solar_cmap
          self.mask = self.previewax.imshow(self.selection_array,
                                            origin='lower',
                                            interpolation='nearest',
                                            cmap=cmap,
                                            vmin=-1, vmax=max([num for _, num in self.config.solar_classes])+1)
          self.previewax.set_xlim([0, self.shape[0]])
          self.previewax.set_ylim([0, self.shape[0]])
          self.previewax.set_aspect("equal")
          self.previewax.set_axis_off()
  
          # add selection layer for lasso
          self.pix = np.arange(self.shape[0])  # assumes square image
          xv, yv = np.meshgrid(self.pix, self.pix)
          self.pix = np.vstack((xv.flatten(), yv.flatten())).T
  
          lineprops = dict(color=self.config.default['lasso_color'],
                           linewidth=self.config.default['lasso_width'])
          self.lasso = LassoSelector(self.imageax, self.onlasso, lineprops=lineprops)
  
          # display everything
          self.canvas.show()
          self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
          self.canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
  
          # add the tool bar
          self.toolbarcenterframe = tk.LabelFrame(self.canvas_frame,
                                                  borderwidth=0,
                                                  text="Draw: unlabeled",
                                                  relief=tk.FLAT,
                                                  labelanchor=tk.N,
                                                  background='red')
          toolbarframe = tk.Frame(self.toolbarcenterframe)
          toolbar = CustomToolbar(self.canvas, toolbarframe, self.toolbarcenterframe, self)
          toolbar.update()
          self.fig.canvas.toolbar.set_message = lambda x: ""  # remove state reporting
          toolbarframe.pack()
          self.toolbarcenterframe.pack(side=tk.BOTTOM, fill=tk.X)