Adding Tooltips to a Timeseries Chart (Hover Tool) in Python Bokeh
Adding tooltips to a timeseries chart using the Bokeh library in Python can significantly enhance the interactivity and user experience of your data visualizations. Tooltips provide additional information when a user hovers over specific data points, making it easier to understand complex datasets. This article will guide you through the process of adding tooltips to a timeseries chart in Bokeh, covering the necessary steps and providing code examples.
Table of Content
Understanding Bokeh and Tooltips
Bokeh is a powerful Python library for creating interactive visualizations for modern web browsers. It provides a wide range of tools and features to create complex plots with ease. One of these features is the HoverTool, which allows you to add tooltips to your plots. Tooltips are small pop-up boxes that appear when you hover over a data point, displaying additional information about that point.
Why Use Tooltips?
Tooltips are useful for:
- Providing additional context or data about specific points in your chart.
- Enhancing the interactivity of your visualizations.
- Allowing users to explore the data more deeply without cluttering the visual space.
Adding Tooltips to the Timeseries Chart with Bokeh
To demonstrate how to add tooltips, let's first create a simple timeseries chart using Bokeh.
import pandas as pd
import numpy as np
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import ColumnDataSource
output_notebook()
# Create a sample DataFrame
dates = pd.date_range('2023-01-01', periods=10)
data = np.random.rand(10)
df = pd.DataFrame({'date': dates, 'value': data})
# Convert the DataFrame to a ColumnDataSource
source = ColumnDataSource(df)
# Create a new plot with a datetime axis type
p = figure(x_axis_type='datetime', title="Timeseries Example", width=800, height=400)
# Add a line renderer
p.line('date', 'value', source=source)
show(p)
Output:

To add tooltips, you'll use the HoverTool from Bokeh's models. The HoverTool allows you to specify which data fields to display in the tooltip. Step-by-Step Guide:
1. Import the HoverTool
First, import the HoverTool from Bokeh.
from bokeh.models import HoverTool
2. Define Tooltips:
Create a list of tuples, where each tuple contains a label and a field name. Use the @ symbol to refer to fields in your ColumnDataSource.
tooltips = [
("Date", "@date{%F}"),
("Value", "@value{0.2f}")
]
3. Add the HoverTool to the Plot
Use the add_tools method to add the HoverTool to your plot. You can also specify the format for datetime fields using the formatters attribute.
hover = HoverTool(
tooltips=tooltips,
formatters={
'@date': 'datetime', # use 'datetime' formatter for '@date' field
},
mode='vline' # display tooltips for all points on a vertical line
)
p.add_tools(hover)
Finally, use the show function to display your plot.
Here is the complete code for adding tooltips to a timeseries chart in Bokeh:
import pandas as pd
import numpy as np
from bokeh.plotting import figure, show, output_notebook
from bokeh.models import ColumnDataSource, HoverTool
# Enable Bokeh output in notebooks
output_notebook()
# Create a sample DataFrame
dates = pd.date_range('2023-01-01', periods=10)
data = np.random.rand(10)
df = pd.DataFrame({'date': dates, 'value': data})
# Convert the DataFrame to a ColumnDataSource
source = ColumnDataSource(df)
# Create a new plot with a datetime axis type
p = figure(x_axis_type='datetime', title="Timeseries Example", width=800, height=400)
# Add a line renderer
p.line('date', 'value', source=source)
# Define tooltips
tooltips = [
("Date", "@date{%F}"),
("Value", "@value{0.2f}")
]
# Add HoverTool
hover = HoverTool(
tooltips=tooltips,
formatters={
'@date': 'datetime', # use 'datetime' formatter for '@date' field
},
mode='vline' # display tooltips for all points on a vertical line
)
p.add_tools(hover)
show(p)
Output:
Handling Large Timeseries Data Efficiently
Timeseries datasets can become quite large, especially with high-frequency data like stock prices or sensor readings. Bokeh is well-equipped to handle large datasets efficiently, but performance considerations must be taken into account when adding interactivity.
Efficient Handling Tips:
- Use ColumnDataSource for managing data
- Optimize rendering with WebGL or downsampling
- Lazy loading of data for large datasets
Conclusion
Adding tooltips to a timeseries chart in Bokeh is a straightforward process that can greatly enhance the interactivity and usability of your visualizations. By following the steps outlined in this article, you can create informative and engaging plots that allow users to explore data in more depth. Bokeh's flexibility with tooltips, including HTML customization, provides a powerful toolset for creating professional-grade visualizations.