Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bokeh plot with initially hidden/muted legend groups

Tags:

python

bokeh

Essentially I want this, but where when the plot loads, some legend entries are already muted or hidden and the user clicks to show them. enter image description here

I have tried to hunt around Bokeh's docs but can't find the setting I need.

like image 880
Jdog Avatar asked Jan 01 '23 06:01

Jdog


1 Answers

This code does what you want (tested on Bokeh v1.0.4). You just need to set the visible property on your glyph renderer.

import pandas as pd
from bokeh.palettes import Spectral4
from bokeh.plotting import figure, output_file, show
from bokeh.sampledata.stocks import AAPL, IBM, MSFT, GOOG

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

stocks = ["AAPL", "IBM", "MSFT", "GOOG"]
lines = {}
for data, name, color in zip([AAPL, IBM, MSFT, GOOG], stocks, Spectral4):
    df = pd.DataFrame(data)
    df['date'] = pd.to_datetime(df['date'])
    lines[name] = p.line(df['date'], df['close'], line_width = 2, color = color, alpha = 0.8, legend = name)

lines["AAPL"].visible = False

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

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

Result:

enter image description here

like image 66
Tony Avatar answered Jan 13 '23 09:01

Tony