code: def draw(self, labels):
          
  
          # Track the positions of the lines being drawn
          y_lower = 10 # The bottom of the silhouette
  
          # Get the colors from the various properties
          # TODO: Use resolve_colors instead of this
          colors = color_palette(self.colormap, self.n_clusters_)
  
          # For each cluster, plot the silhouette scores
          for idx in range(self.n_clusters_):
  
              # Collect silhouette scores for samples in the current cluster .
              values = self.silhouette_samples_[labels == idx]
              values.sort()
  
              # Compute the size of the cluster and find upper limit
              size = values.shape[0]
              y_upper = y_lower + size
  
              color = colors[idx]
              self.ax.fill_betweenx(
                  np.arange(y_lower, y_upper), 0, values,
                  facecolor=color, edgecolor=color, alpha=0.5
              )
  
              # Label the silhouette plots with their cluster numbers
              self.ax.text(-0.05, y_lower + 0.5 * size, str(idx))
  
              # Compute the new y_lower for next plot
              y_lower = y_upper + 10
  
          # The vertical line for average silhouette score of all the values
          self.ax.axvline(
              x=self.silhouette_score_, color="red", linestyle="--"
          )
  
          return self.ax
docs: Draw the silhouettes for each sample and the average score.
  
          Parameters
          ----------
  
          labels : array-like
              An array with the cluster label for each silhouette sample,
              usually computed with ``predict()``. Labels are not stored on the
              visualizer so that the figure can be redrawn with new data.