docs: def draw(self, X, y=None):
          """
          Draws the points described by X and colored by the points in y. Can be
          called multiple times before finalize to add more scatter plots to the
          axes, however ``fit()`` must be called before use.
  
          Parameters
          ----------
          X : array-like of shape (n, 2)
              The matrix produced by the ``transform()`` method.
  
          y : array-like of shape (n,), optional
              The target, used to specify the colors of the points.
  
          Returns
          -------
          self.ax : matplotlib Axes object
              Returns the axes that the scatter plot was drawn on.
          """
          scatter_kwargs = {"alpha": self.alpha}
  
          # Determine the colors
          if self._target_color_type == SINGLE:
              scatter_kwargs["c"] = "b"
  
          elif self._target_color_type == DISCRETE:
              if y is None:
                  raise YellowbrickValueError("y is required for discrete target")
  
              scatter_kwargs["c"] = [
                  self._colors[np.searchsorted(self.classes_, (yi))] for yi in y
              ]
  
          elif self._target_color_type == CONTINUOUS:
              if y is None:
                  raise YellowbrickValueError("y is required for continuous target")
  
              # TODO manually make colorbar so we can draw it in finalize
              scatter_kwargs["c"] = y
              scatter_kwargs["cmap"] = self.colors or palettes.DEFAULT_SEQUENCE
  
          else:
              # Technically this should never be raised
              raise NotFitted("could not determine target color type")
  
          # Draw the scatter plot with the associated colors and alpha
          self._scatter = self.ax.scatter(X[:,0], X[:,1], **scatter_kwargs)
          return self.ax