In matplotlib
the scatterplot offers the possibility of using the color of a plot to indicate value or magnitude like this plot:
For bokeh
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})