Plotly FigureWidget Overview in Python

Introduction to the Plotly FigureWidget


Plotly Studio: Transform any dataset into an interactive data application in minutes with AI. Try Plotly Studio now.

The Plotly FigureWidget allows you to add Plotly charts as interactive widgets in Jupyter and other compatible notebooks. To use the FigureWidget, you'll need to install anywidget:

In [1]:
%%bash
pip install anywidget
Defaulting to user installation because normal site-packages is not writeable
Collecting anywidget
  Downloading anywidget-0.11.0-py3-none-any.whl.metadata (8.9 kB)
Collecting ipywidgets>=7.6.0 (from anywidget)
  Downloading ipywidgets-8.1.9-py3-none-any.whl.metadata (2.4 kB)
Collecting psygnal>=0.8.1 (from anywidget)
  Downloading psygnal-0.16.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (6.5 kB)
Requirement already satisfied: typing-extensions>=4.2.0 in /usr/lib/python3/dist-packages (from anywidget) (4.10.0)
Collecting comm>=0.1.3 (from ipywidgets>=7.6.0->anywidget)
  Downloading comm-0.2.3-py3-none-any.whl.metadata (3.7 kB)
Collecting ipython>=6.1.0 (from ipywidgets>=7.6.0->anywidget)
  Downloading ipython-9.17.1-py3-none-any.whl.metadata (4.6 kB)
Collecting traitlets>=4.3.1 (from ipywidgets>=7.6.0->anywidget)
  Downloading traitlets-5.16.1-py3-none-any.whl.metadata (10 kB)
Collecting widgetsnbextension~=4.0.16 (from ipywidgets>=7.6.0->anywidget)
  Downloading widgetsnbextension-4.0.16-py3-none-any.whl.metadata (1.6 kB)
Collecting jupyterlab_widgets~=3.0.17 (from ipywidgets>=7.6.0->anywidget)
  Downloading jupyterlab_widgets-3.0.17-py3-none-any.whl.metadata (20 kB)
Collecting ipython-pygments-lexers>=1.0.0 (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading ipython_pygments_lexers-1.1.1-py3-none-any.whl.metadata (1.1 kB)
Collecting jedi>=0.18.2 (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading jedi-0.20.0-py2.py3-none-any.whl.metadata (23 kB)
Collecting matplotlib-inline>=0.1.6 (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading matplotlib_inline-0.2.2-py3-none-any.whl.metadata (2.4 kB)
Requirement already satisfied: pexpect>4.6 in /usr/lib/python3/dist-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget) (4.9.0)
Collecting prompt_toolkit<3.1.0,>=3.0.41 (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading prompt_toolkit-3.0.53-py3-none-any.whl.metadata (6.4 kB)
Collecting psutil>=7 (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl.metadata (22 kB)
Requirement already satisfied: pygments>=2.14.0 in /usr/lib/python3/dist-packages (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget) (2.17.2)
Collecting stack_data>=0.6.0 (from ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading stack_data-0.6.3-py3-none-any.whl.metadata (18 kB)
Collecting parso<0.9.0,>=0.8.6 (from jedi>=0.18.2->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading parso-0.8.7-py2.py3-none-any.whl.metadata (8.2 kB)
Collecting wcwidth>=0.1.4 (from prompt_toolkit<3.1.0,>=3.0.41->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading wcwidth-0.8.4-py3-none-any.whl.metadata (23 kB)
Collecting executing>=1.2.0 (from stack_data>=0.6.0->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading executing-2.2.1-py2.py3-none-any.whl.metadata (8.9 kB)
Collecting asttokens>=2.1.0 (from stack_data>=0.6.0->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading asttokens-3.0.2-py3-none-any.whl.metadata (5.7 kB)
Collecting pure-eval (from stack_data>=0.6.0->ipython>=6.1.0->ipywidgets>=7.6.0->anywidget)
  Downloading pure_eval-0.2.4-py3-none-any.whl.metadata (6.4 kB)
Downloading anywidget-0.11.0-py3-none-any.whl (317 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 317.3/317.3 kB 7.2 MB/s eta 0:00:00
Downloading ipywidgets-8.1.9-py3-none-any.whl (140 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.1/140.1 kB 10.0 MB/s eta 0:00:00
Downloading psygnal-0.16.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (548 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 548.7/548.7 kB 20.6 MB/s eta 0:00:00
Downloading comm-0.2.3-py3-none-any.whl (7.3 kB)
Downloading ipython-9.17.1-py3-none-any.whl (639 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 639.0/639.0 kB 38.8 MB/s eta 0:00:00
Downloading jupyterlab_widgets-3.0.17-py3-none-any.whl (217 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 217.3/217.3 kB 46.8 MB/s eta 0:00:00
Downloading traitlets-5.16.1-py3-none-any.whl (86 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 86.2/86.2 kB 27.1 MB/s eta 0:00:00
Downloading widgetsnbextension-4.0.16-py3-none-any.whl (2.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 56.9 MB/s eta 0:00:00
Downloading ipython_pygments_lexers-1.1.1-py3-none-any.whl (8.1 kB)
Downloading jedi-0.20.0-py2.py3-none-any.whl (4.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.9/4.9 MB 73.9 MB/s eta 0:00:00
Downloading matplotlib_inline-0.2.2-py3-none-any.whl (9.5 kB)
Downloading prompt_toolkit-3.0.53-py3-none-any.whl (392 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 392.3/392.3 kB 56.9 MB/s eta 0:00:00
Downloading psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl (155 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.6/155.6 kB 2.5 MB/s eta 0:00:00
Downloading stack_data-0.6.3-py3-none-any.whl (24 kB)
Downloading asttokens-3.0.2-py3-none-any.whl (28 kB)
Downloading executing-2.2.1-py2.py3-none-any.whl (28 kB)
Downloading parso-0.8.7-py2.py3-none-any.whl (107 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 107.0/107.0 kB 19.0 MB/s eta 0:00:00
Downloading wcwidth-0.8.4-py3-none-any.whl (299 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 299.5/299.5 kB 21.6 MB/s eta 0:00:00
Downloading pure_eval-0.2.4-py3-none-any.whl (11 kB)
Installing collected packages: pure-eval, widgetsnbextension, wcwidth, traitlets, psygnal, psutil, parso, jupyterlab_widgets, ipython-pygments-lexers, executing, comm, asttokens, stack_data, prompt_toolkit, matplotlib-inline, jedi, ipython, ipywidgets, anywidget
Successfully installed anywidget-0.11.0 asttokens-3.0.2 comm-0.2.3 executing-2.2.1 ipython-9.17.1 ipython-pygments-lexers-1.1.1 ipywidgets-8.1.9 jedi-0.20.0 jupyterlab_widgets-3.0.17 matplotlib-inline-0.2.2 parso-0.8.7 prompt_toolkit-3.0.53 psutil-7.2.2 psygnal-0.16.1 pure-eval-0.2.4 stack_data-0.6.3 traitlets-5.16.1 wcwidth-0.8.4 widgetsnbextension-4.0.16

Create a Simple FigureWidget

Create an empty FigureWidget and then view it.

In [2]:
import plotly.graph_objects as go

f = go.FigureWidget()
f
Out[2]:

Add traces or update the layout and then watch the output above update in real time.

In [3]:
f.add_scatter(y=[2, 1, 4, 3]);
In [4]:
f.add_bar(y=[1, 4, 3, 2]);
In [5]:
f.layout.title = 'Hello FigureWidget'

Update the Data and the Layout

In [6]:
# update scatter data
scatter = f.data[0]
scatter.y = [3, 1, 4, 3]
In [7]:
# update bar data
bar = f.data[1]
bar.y = [5, 3, 2, 8]
In [8]:
f.layout.title.text = 'This is a new title'