Using colormap with bokeh scatter

It's easy enough to just use matplotlib's colormaps directly. For example, the following uses viridis in bokeh's example (note that I'm using a jupyter notebook):

import numpy as np

from bokeh.plotting import figure, show, output_notebook
import matplotlib as mpl

output_notebook()

N = 4000
x = np.random.random(size=N) * 100
y = np.random.random(size=N) * 100
radii = np.random.random(size=N) * 1.5
colors = [
    "#%02x%02x%02x" % (int(r), int(g), int(b)) for r, g, b, _ in 255*mpl.cm.viridis(mpl.colors.Normalize()(radii))
]

p = figure()

p.scatter(x, y, radius=radii,
          fill_color=colors, fill_alpha=0.6,
          line_color=None)

show(p)  

Essentially, for any matplotlib colormap in cm, initializing it with an array of values will return an array with each value replaced by [r,g,b,a] values in the range [0,1]. Note that this assumes all the values are between 0 and 1 as well; here I use matplot.colors.Normalize to ensure this.


Another option if you want to use a field name, is to use a LinearColorMapper:

from bokeh.models import LinearColorMapper

color_mapper = LinearColorMapper(palette='Magma256', low=min(radii), high=max(radii))

p.scatter(x,y,color={'field': 'radii', 'transform': color_mapper})