title: bokeh - plotting shapefile map using datashader
body: <p>Initially, I created an interactive map of the UK Postcode area where an individual area is color represented based on its value (e.g. population in that post code area) as following.</p>
  
  <pre><code>from bokeh.plotting import figure
  from bokeh.palettes import Viridis256 as palette
  from bokeh.models import LinearColorMapper
  from bokeh.models import ColumnDataSource
  import geopandas as gpd
  
  shp = 'file_path_to_the_downloaded_shapefile'
  #read shape file into dataframe using geopandas
  df = gpd.read_file(shp)
  
  def expandMultiPolygons(row, geometry):
      if row[geometry].type = 'MultiPolygon':
         row[geometry] = [p for p in row[geometry]]
      return row
  #Some rows were in MultiPolygons instead of Polygons.
  #Expand MultiPolygons to multi rows of Polygons
  df = df.apply(expandMultiPolygons, geometry='geometry', axis=1)
  df = df.set_index('Area')['geometry'].apply(pd.Series).stack().reset_index()
  
  #Visualize the polygons. To visualize different colors for different post areas, I added another column called 'value' which has some random integer value. 
  
  p = figure()
  color_mapper = LinearColorMapper(palette=palette)
  source = ColumnDataSource(df)
  p.patches('x', 'y', source=source,\
              fill_color={'field': 'value', 'transform': color_mapper},\
              fill_alpha=1.0, line_color="black", line_width=0.05)
  </code></pre>
  
  <p>where df is a dataframe of four columns : post code area, x-coordinate, y-coordinate, value (i.e. population). </p>
  
  <p>The above code creates an interactive map on a web browser which is great but I noticed the interactivity is not very smooth in speed. If I zoom in or move the map, it renders slowly. The size of the dataframe is only 1106 rows, so I'm quite confused why it is so slow. </p>
  
  <p>As one of the possible solutions, I came across with datashader (<a href="https://datashader.readthedocs.io/en/latest/" rel="nofollow noreferrer">https://datashader.readthedocs.io/en/latest/</a>) but I find the example script is quite complicated and most of them are with holoview package on Jupyter notebook but I want to create a dashboard using bokeh. </p>
  
  <p>Does anyone advise me in incorporating datashader into the above bokeh script? Do I need a different function within datashader to create the shape map instead of using bokeh's patches function?</p>
  
  <p>Any suggestion would be highly appreciated!!!</p>