Bokeh is a Python data visualization library for creating interactive charts & plots. It helps us in making beautiful graphs from simple plots to dashboards. Using this library, we can create javascript-generated visualization without writing any scripts.
What is a widget?
Widgets are interactive controls that we can use with bokeh applications to make the interactive interface to visualizations. To use widgets, we can add them to the document & define their functions, or we can add them directly to the document root, added inside a layout. Two ways are allowed in bokeh to define methods for call back functionality:
- Use CustomJS callback for interactivity which works in HTML documents.
- Use bokeh server & setup event handlers with .on_change or .on_click.
These event handlers are user-defined functions in python that can be added to widgets and then called when certain actions are taken or attributes are changed in widgets. Before adding widgets to the visualization, we need to import some packages from bokeh library like:
- .io for showing the widgets & to make the output file.
- .layouts for widget box to wrap up all the widgets in it.
- .models.widgets base class for all type of interactive widgets.
And in the below example, we have used output_file() function to store the results into the file & show() to show the widgets in the browser.
Button
It is a clickable button widget that takes three parameters in constructors:
- label: String parameter used as text label or caption for the button to display.
- icon: Optional parameter used to appear image to the left of button's caption.
- callback: Custom javascript functions to be called when certain changes occurred like button clicking.
Here we have used button_type to specify the color like primary(blue), warning(yellow), success(green), danger(red).
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import Button output_file("button.html") b1 = Button(label = "Back", button_type = "primary") show(widgetbox(b1))
Output:

Dropdown menu
This is a list of options that each contains a menu vertically. When you click one of the options from it a list of options dropdown below the main menu.
It takes three parameters:
- label: The text which is to be displayed as the title of the menu.
- button_type: To specify the button type.
- menu: To specify the menu of the options available to choose.
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import Dropdown output_file("dropdown_menu.html") menu = [("Item 1", "item_1"), ("Item 2", "item_2"), ("Item 3", "item_3")] dropdown_menu = Dropdown(label = "Dropdown button", button_type = "warning", menu = menu) show(widgetbox(dropdown_menu))
Output:

Checkbox button group
Through this widget, we can select multiple options at once.
Two parameters are given here:
- labels: To specify the name of the options to be selected.
- active: To define which of the options to be selected at once(like 0 for first options,1 for second & so on).
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import CheckboxButtonGroup output_file("checkbox_button.html") cbg= CheckboxButtonGroup( labels=["Apple", "Samsung", "Lenovo"], active=[0, 1]) show(widgetbox(cbg))
Output:

Radio button group
This widget allows selecting at most one button at a time.
Parameters:
- labels: To define name of the options.
- active: Here we can give only one value because in the radio button group only one button to select at a time.
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import RadioButtonGroup output_file("radio_button.html") radio_button = RadioButtonGroup( labels = ["Apple", "Mango", "Orange"], active = 0) show(widgetbox(radio_button))
Output:

Select
It is a single selection widget which allows selecting a single value from a list of options.
The parameters used here are:
- title: To specify the title of the selection widget.
- value: Used to specify which value from the options to be selected.
- options: To specify the options to be available.
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import Select output_file("single_select.html") select = Select(title="Option:", value="Blue", options=["Red", "Yellow", "Blue", "Green"]) show(widgetbox(select))
Output:

Slider
The slider has parameters like start or end value, step size, initial value, and a title.
- start: From which value the slider should start.
- end: The ending value where slider stops.
- value: In which value slider will stop.
- step: This parameter specifies the step value means the jump between the values.
- title: The title of the value in which slider stops.
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import Slider output_file("slider.html") slider = Slider(start = 0, end = 12, value = 5, step = .1, title = "Average") show(widgetbox(slider))
Output:

TextInput
This widget is used for collecting a line of text from the user.
- value: Initially what should be displayed before taking user input.
- title: Title of the TextInput widgets.
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import TextInput output_file("text_input.html") text = TextInput(value = "", title = "Label:") show(widgetbox(text))
Output:

Paragraph
Used to display a block of text.
- text: Text which is to be displayed.
- width: height: To specify the width and height of the paragraph widget.
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import Paragraph output_file("para.html") para = Paragraph(text = """Encryption is the process of converting normal message (plaintext) into meaningless message (Cipher text). Whereas Decryption is the process of converting meaningless message (Cipher text) into its original form (Plaintext).""", width = 250, height = 80) show(widgetbox(para))
Output:

TextareaInput
This is used to store multiple lines of text from users.
- value: The default value of the Textarea widget.
- rows: Number of rows to be given as a space for text input.
- title: To specify the title of the Textarea widget.
Python3 from bokeh.io import show from bokeh.models import TextAreaInput text_area = TextAreaInput(value = "Write here", rows = 6, title = "Label:") show(text_area)
Output:

PasswordInput:
This hides the entered text input which is used for password input.
- placeholder: A short hint about the data which is to be entered in input area and when the user input value this will be removed.
Python3 from bokeh.io import show from bokeh.models import PasswordInput password = PasswordInput(placeholder = "Enter password...") show(password)
Output:

Pretext:
Used to display pre-formatted text.
- text: Text which is to be displayed.
- width, height: To specify the width and height of widget.
Python3 from bokeh.io import show from bokeh.models import PreText pretext = PreText(text="""Encryption is the process of converting normal message (plaintext) into meaningless message (Cipher text). Whereas Decryption is the process of converting meaningless message (Cipher text) into its original form (Plaintext)""", width = 500, height = 120) show(pretext)
Output:

RadioGroup:
It is a collection of radio boxes.
- labels: To specify the value of the options available to select.
- active: Default value which is shown as selected before choosing any option.
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import RadioGroup output_file("radio_group.html") radio_g = RadioGroup( labels = ["AI", "ML", "Deep Learning"], active = 1) show(widgetbox(radio_g))
Output:

Div:
It is a small section or container in which various styling of that section can be done.
- text: Content which is to be displayed.
- width, height: To specify the width and height of this widget.
Python3 from bokeh.io import output_file, show from bokeh.layouts import widgetbox from bokeh.models.widgets import Div output_file("div.html") div = Div(text="""<a href="https://www.geeksforgeeks.org/python-programming-language/"> Python</a> is <b>high level</b> programming language. Its easy to learn because of its syntax.""", width = 250, height = 100) show(widgetbox(div))
Output:

Toggle
Used to display the checked/unchecked state of the button or to change the setting between these two states.
- label: Text to be displayed as the title of the button.
- button_type: To specify the color of the button.
- width, height: To specify the width and height of the button.
Python3 from bokeh.io import output_file, show from bokeh.models.widgets import Toggle output_file("toggle.html") toggle = Toggle(label = "Switch", button_type = "success", width = 250, height = 100) show(toggle)
Output:

FileInput:
This allows the user to choose a file and store its information.
Python3 from bokeh.io import show from bokeh.models.widgets import FileInput file = FileInput() show(file)
Output:

Spinner:
It provides a quick way to select one value from a set. In this widget, we have used different libraries like NumPy, etc.
- np.random.rand: To generate random numbers.
- figure: To make a figure for scatter plot.
In spinner constructor different parameters are given like:
- title: For giving title to spinner.
- low, high: To specify the lowest and highest possible value allowed for increasing the size of points in dropdown menu.
- step: This parameter specifies the step value means the jump between the values.
- value: Default value for menu.
- width: To define the width of the spinner.
And here we have linked two bokeh model properties using custom js callbacks(js_link) to update the properties of the model whenever certain actions are done.
Python3 import numpy as np from bokeh.io import show from bokeh.layouts import column, row from bokeh.models import Spinner from bokeh.plotting import figure x = np.random.rand(10) y = np.random.rand(10) a = figure(x_range=(0, 1), y_range=(0, 1)) points = a.scatter(x = x, y = y, size = 4) spinner = Spinner(title="Glyph size", low = 1, high = 40, step = 0.5, value = 4, width = 80) spinner.js_link('value', points.glyph, 'size') show(row(column(spinner, width = 100), a))
Output:

Tabs:
This widget allows multiple plots to be displayed in configurable panels. The layout of this widget consists of two bokeh models i.e. Tab() and Panel().
Here we have used figure() to make a figure for plotting and Panel() which is a container having title and control.
- circle(): To make circle plot.
- line(): To make a line plot.
Python3 from bokeh.io import show from bokeh.models import Panel, Tabs from bokeh.plotting import figure p1 = figure(plot_width=350, plot_height=300) p1.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size = 20, color = "red", alpha = 0.5) tab1 = Panel(child=p1, closable = True, title = "circle") p2 = figure(plot_width = 350, plot_height = 300) p2.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width = 3, color = "blue", alpha = 0.5) tab2 = Panel(child = p2, closable = True, title = "line") show(Tabs(tabs = [tab1, tab2]))
Output:

DateRangeSlider:
It is used to select the date range with a slider.
Parameters used are:
- value: The default date range value which is to be displayed.
- start: To specify the starting value from where the slider should start.
- end: To specify the ending value from where the slider should stop.
Python3 from datetime import date from bokeh.io import show from bokeh.models import CustomJS, DateRangeSlider date_range= DateRangeSlider(value = (date(2020, 1, 9), date(2021, 1, 10)), start = date(2019, 8, 12), end = date(2021, 6, 9)) show(date_range)
Output:

DatePicker:
It is a calendar-based date selection widget.
- title: Text which is to be shown as the title of the widget.
- value: Default value to be displayed when options are not selected.
- min_date: Minimum date means from which month & date the calendar will start.
- max_date: Maximum date means from which month & date the calendar will be ended.
Python3 from bokeh.io import show from bokeh.models import CustomJS, DatePicker dp = DatePicker(title = 'Select date', value = "2021-06-09", min_date = "2020-10-01", max_date = "2021-12-31") show(dp)
Output:

DataTable:
It is based on a slick grid which takes external components as data sources. And any plots which contain this data will automatically be linked with the plots and table.
Here we have made a dictionary for columns value and then mapped the list of data which is in form of a dictionary with a column using ColumnDataSource() function after that we make the layout of the column using TableColumn() having arguments as-
- field: Column contains what values.
- title: Title of column.
- formatter: To make the format of date column as date.
DataTable constructor contains:
- source: To define the mapped data with column as source.
- Column: To specify the column values.
- width, height: To define the width, height of the table.
Python3 from datetime import date from random import randint from bokeh.io import show from bokeh.models import ColumnDataSource, DataTable, DateFormatter, TableColumn data = dict( dates=[date(2021, 5, i+1) for i in range(10)], downloads=[randint(0, 130) for i in range(10)], ) source = ColumnDataSource(data) columns = [ TableColumn(field = "dates", title = "Date", formatter = DateFormatter()), TableColumn(field = "downloads", title = "Downloads"), ] data_table = DataTable(source = source, columns = columns, width = 400, height = 280) show(data_table)
Output:

ColorPicker:
This provides the user to select RGB color value.
- Figure: To make a figure for plotting.
- plot.line: Used to make a line plot.
Python3 from bokeh.io import show from bokeh.layouts import column from bokeh.models import ColorPicker from bokeh.plotting import Figure plot = Figure(x_range=(0, 1), y_range=(0, 1), plot_width=350, plot_height=400) line = plot.line(x=(0,1), y=(0,1), color="green", line_width=4) picker = ColorPicker(title="Line Color") picker.js_link('color', line.glyph, 'line_color') show(column(plot, picker))
Output:
Similar Reads
Python Bokeh tutorial - Interactive Data Visualization with Bokeh
Python Bokeh is a Data Visualization library that provides interactive charts and plots. Bokeh renders its plots using HTML and JavaScript that uses modern web browsers for presenting elegant, concise construction of novel graphics with high-level interactivity. Features of Bokeh: Flexibility: Boke
15+ min read
Getting started With Bokeh
Plotting Different Types of Plots
Functions in Bokeh
bokeh.plotting.figure.cross() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, HTML, and server. Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with de
2 min read
bokeh.plotting.figure.diamond_cross() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like a notebook, HTML and server. Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with d
2 min read
bokeh.plotting.figure.step() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
bokeh.plotting.figure.circle_cross() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
bokeh.plotting.figure.annular_wedge() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
bokeh.plotting.figure.arc() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
bokeh.plotting.figure.asterisk() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
bokeh.plotting.figure.bezier() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
bokeh.plotting.figure.circle_x() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
bokeh.plotting.figure.circle() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
bokeh.plotting.figure.annulus() function in Python
Bokeh is a data visualization library in Python that provides high-performance interactive charts and plots and the output can be obtained in various mediums like notebook, html and server. The Figure Class create a new Figure for plotting. It is a subclass of Plot that simplifies plot creation with
4 min read
Interactive Data Visualization
Graph
Python Bokeh - Plotting a Line Graph
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Bokeh can be used to plot a line graph. Plotting a line gra
4 min read
Python Bokeh - Plotting Multiple Lines on a Graph
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Bokeh can be used to plot multiple lines on a graph. Plotti
3 min read
Python Bokeh - Plotting Horizontal Bar Graphs
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Bokeh can be used to plot horizontal bar graphs. Plotting h
4 min read
Python Bokeh - Plotting Vertical Bar Graphs
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity.Bokeh can be used to plot vertical bar graphs. Plotting vert
4 min read
Python Bokeh - Plotting a Scatter Plot on a Graph
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Bokeh can be used to plot a scatter plot on a graph. Plotti
2 min read
Python Bokeh - Plotting Patches on a Graph
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Bokeh can be used to plot patches on a graph. Plotting patc
2 min read
Make an area plot in Python using Bokeh
Bokeh is a Python interactive data visualization. Unlike Matplotlib and Seaborn, Bokeh renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Plotting the Area Plots A
2 min read
Python Bokeh - Plotting Wedges on a Graph
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Bokeh can be used to plot wedges on a graph. Plotting wedge
3 min read
Python Bokeh - Making a Pie Chart
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Let us see how to plot a pie chart in Bokeh. Does not provi
3 min read
Python Bokeh - Plotting Triangles on a Graph
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Bokeh can be used to plot triangles on a graph. Plotting tr
2 min read
Python Bokeh - Plotting Ovals on a Graph
Bokeh is a Python interactive data visualization. It renders its plots using HTML and JavaScript. It targets modern web browsers for presentation providing elegant, concise construction of novel graphics with high-performance interactivity. Bokeh can be used to plot ovals on a graph. Plotting ovals
4 min read
Building Advanced Visualizations with Glyphs