Interactive Legends

Legends added to Bokeh plots can be made interactive so that clicking or tapping on the legend entries will hide or mute the corresponding glyph in a plot. These modes are activated by setting the click_policy property on a Legend to either "hide" or "mute".

Note

Interactive legend features currently work on “per-glyph” legends. Legends that are created by specifying a column to automatically group do no yet work with the features described below

Hiding Glyphs

Sometimes it is desirable to be able to hide glyphs by clicking on an entry in a Legend. In Bokeh this can be accomplished by setting the legend click_policy property to "hide" as shown in the example below:

import pandas as pd

from bokeh.palettes import Spectral4
from bokeh.plotting import figure, output_file, show

p = figure(plot_width=800, plot_height=250, x_axis_type="datetime")
p.title.text = 'Click on legend entries to hide the corresponding lines'

for name, color in zip(['AAPL', 'IBM', 'MSFT', 'GOOG'], Spectral4):
    df = pd.read_csv(
        "http://ichart.yahoo.com/table.csv?s=%s&a=0&b=1&c=2005&d=0&e=1&f=2014" % name,
        parse_dates=['Date']
    )
    p.line(df['Date'], df['Close'], line_width=2, color=color, alpha=0.8, legend=name)

p.legend.location = "top_left"
p.legend.click_policy="hide"

output_file("interactive_legend.html", title="interactive_legend.py example")

show(p)

Muting Glyphs

Other times it is preferable for legend interaction to mute a glyph, instead of hiding it entirely. In this case, set click_policy property to "mute". Additionally, the visual properties of a “muted glyph” also need to be specified. In general this is does exactly in the same way as for Selected and Unselected Glyphs or Hover Inspections. In the example below, muted_alpha=0.2 is passed to circle to specify that muted lines should be drawn with a low alpha muted glyph.

import pandas as pd

from bokeh.palettes import Spectral4
from bokeh.plotting import figure, output_file, show

p = figure(plot_width=800, plot_height=250, x_axis_type="datetime")
p.title.text = 'Click on legend entries to mute the corresponding lines'

for name, color in zip(['AAPL', 'IBM', 'MSFT', 'GOOG'], Spectral4):
    df = pd.read_csv(
        "http://ichart.yahoo.com/table.csv?s=%s&a=0&b=1&c=2005&d=0&e=1&f=2014" % name,
        parse_dates=['Date']
    )
    p.line(df['Date'], df['Close'], line_width=2, color=color, alpha=0.8, muted_alpha=0.2, legend=name)

p.legend.location = "top_left"
p.legend.click_policy="mute"

output_file("interactive_legend.html", title="interactive_legend.py example")

show(p)