Bokeh Tutorial

00. Introduction and Setup

What is Bokeh

Bokeh is an interactive visualization library that targets modern web browsers for presentation. It is good for:

  • Interactive visualization in modern browsers
  • Standalone HTML documents, or server-backed apps
  • Expressive and versatile graphics
  • Large, dynamic or streaming data
  • Easy usage from python (or Scala, or R, or...)

And most importantly:


Bokeh is an interactive visualization library for modern web browsers. It provides elegant, concise construction of versatile graphics, and affords high-performance interactivity over large or streaming datasets. Bokeh can help anyone who would like to quickly and easily make interactive plots, dashboards, and data applications.

What can I do with Bokeh

In [ ]:
# Standard imports 

from import output_notebook, show
In [ ]:
# Plot a complex chart with interactive hover in a few lines of code

from bokeh.models import ColumnDataSource, HoverTool
from bokeh.plotting import figure
from bokeh.sampledata.autompg import autompg_clean as df
from bokeh.transform import factor_cmap

df.cyl = df.cyl.astype(str)
df.yr = df.yr.astype(str)

group = df.groupby(by=['cyl', 'mfr'])
source = ColumnDataSource(group)

p = figure(width=800, height=300, title="Mean MPG by # Cylinders and Manufacturer",
           x_range=group, toolbar_location=None, tools="")

p.xgrid.grid_line_color = None
p.xaxis.axis_label = "Manufacturer grouped by # Cylinders"
p.xaxis.major_label_orientation = 1.2

index_cmap = factor_cmap('cyl_mfr', palette=['#2b83ba', '#abdda4', '#ffffbf', '#fdae61', '#d7191c'], 
                         factors=sorted(df.cyl.unique()), end=1)

p.vbar(x='cyl_mfr', top='mpg_mean', width=1, source=source,
       line_color="white", fill_color=index_cmap, 
       hover_line_color="darkgrey", hover_fill_color=index_cmap)

p.add_tools(HoverTool(tooltips=[("MPG", "@mpg_mean"), ("Cyl, Mfr", "@cyl_mfr")]))

In [ ]:
# Create and deploy interactive data applications

from IPython.display import IFrame
IFrame('', width=900, height=500)

Getting set up

In [ ]:
from IPython.core.display import Markdown

Setup-test, run the next cell. Hopefully you should see output that looks something like this:

IPython - 7.9.0
Pandas - 0.25.2
Bokeh - 1.4.0

If this isn't working for you, see the in this directory.

In [ ]:
from IPython import __version__ as ipython_version
from pandas import __version__ as pandas_version
from bokeh import __version__ as bokeh_version
print("IPython - %s" % ipython_version)
print("Pandas - %s" % pandas_version)
print("Bokeh - %s" % bokeh_version)

Next Section

Click on this link to go to the next notebook: 01 - Basic Plotting

In [ ]: