code: def add_interpolated_colorbar(da, colors, direction):
      
      # Special case that arises due to not so useful
      # aesthetic mapping.
      if len(colors) == 1:
          colors = [colors[0], colors[0]]
  
      # Number of horizontal egdes(breaks) in the grid
      # No need to create more nbreak than colors, provided
      # no. of colors = no. of breaks = no. of cmap colors
      # the shading does a perfect interpolation
      nbreak = len(colors)
  
      if direction == 'vertical':
          mesh_width = 1
          mesh_height = nbreak-1
          linewidth = da.height/mesh_height
          # Construct rectangular meshgrid
          # The values(Z) at each vertex are just the
          # normalized (onto [0, 1]) vertical distance
          x = np.array([0, da.width])
          y = np.arange(0, nbreak) * linewidth
          X, Y = np.meshgrid(x, y)
          Z = Y/y.max()
      else:
          mesh_width = nbreak-1
          mesh_height = 1
          linewidth = da.width/mesh_width
          x = np.arange(0, nbreak) * linewidth
          y = np.array([0, da.height])
          X, Y = np.meshgrid(x, y)
          Z = X/x.max()
  
      # As a 2D coordinates array
      coordinates = np.zeros(
          ((mesh_width+1)*(mesh_height+1), 2),
          dtype=float)
      coordinates[:, 0] = X.ravel()
      coordinates[:, 1] = Y.ravel()
  
      cmap = ListedColormap(colors)
      coll = mcoll.QuadMesh(mesh_width, mesh_height,
                            coordinates,
                            antialiased=False,
                            shading='gouraud',
                            linewidth=0,
                            cmap=cmap,
                            array=Z.ravel())
      da.add_artist(coll)
docs: Add 'rastered' colorbar to DrawingArea