title: Changing colormap for categorical data in Holoviews/Datashader
body: <p>I'm trying to visualize categorical spatial data using Datashader and Holoviews, similarly to <a href="https://anaconda.org/jbednar/census-hv-dask/notebook" rel="nofollow noreferrer">https://anaconda.org/jbednar/census-hv-dask/notebook</a>. However, when I try to assign different colors to categories, I always end up with same (presumably default) colors (<a href="https://i.stack.imgur.com/UOcow.png" rel="nofollow noreferrer">An example of the output image</a>.)</p>
  
  <p>Here is the code I'm running in Jupyter notebook. Could anyone advise me on how to make the custom color map work? Or at least run the code to see if you end up with colors matching the legend or not. Thank you!</p>
  
  <pre class="lang-python prettyprint-override"><code>from sklearn.datasets.samples_generator import make_blobs
  from matplotlib import pyplot
  import pandas as pd
  
  import holoviews as hv
  import geoviews as gv
  import datashader as ds
  from cartopy import crs
  from matplotlib.cm import get_cmap
  from holoviews.operation.datashader import datashade, aggregate
  hv.notebook_extension('bokeh', width=95)
  
  # Generating blob data:
  X, y = make_blobs(n_samples=5000000, centers=5, n_features=2)
  df = pd.DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
  
  # Plotting the blobs using datashader and holoviews:
  %opts Overlay [width=800 height=455 xaxis=None yaxis=None show_grid=False] 
  %opts Shape (fill_color=None line_width=1.5) [apply_ranges=False] 
  %opts Points [apply_ranges=False] WMTS (alpha=0.5) NdOverlay [tools=['tap']]
  
  color_key = {0:'red', 1:'blue', 2:'green', 3:'yellow', 4:'black'}
  labels    = {0:'red', 1:'blue', 2:'green', 3:'yellow', 4:'black'}
  
  color_points = hv.NdOverlay({labels[k]: gv.Points([0,0], crs=crs.PlateCarree(),
                              label=labels[k])(style=dict(color=v))
                              for k, v in color_key.items()})
  
  dataset = gv.Dataset(df, kdims=['x', 'y'], vdims=['label'])
  shaded = datashade(hv.Points(dataset), cmap=color_key, aggregator=ds.count_cat('label'))
  
  shaded * color_points
  </code></pre>