Plots
Plotting
check_dependencies()marimo supports several popular plotting libraries, including matplotlib, plotly, seaborn, and altair.
This tutorial gives examples using matplotlib; other libraries are used similarly. ## Matplotlib To show a plot, include it in the last expression of a cell (just like any other output).
# create the plot in the last line of the cell
import matplotlib.pyplot as plt
plt.plot([1, 2])
plt.plot([1, 2])# create a plot
plt.plot([1, 2])
# ... do some work ...
# make plt.gca() the last line of the cell
plt.gca()
plt.plot([1, 2])
# ... do some work ...
# make plt.gca() the last line of the cell
plt.gca()mo.accordion(plt_show_explainer)A new figure every cell. Every cell starts with an empty figure for the imperative pyplot API.
x = np.linspace(start=-4, stop=4, num=100, dtype=float)plt.plot(x, x)
plt.plot(x, x**2)
plt.gca()plt.plot(x, x**3)To build a figure over multiple cells, use the object-oriented API and create your own axis:
_, axis = plt.subplots()
axis.plot(x, x)
axis.plot(x, x**2)
axisaxis.plot(x, x**3)
axisDraw plots interactively
Draw plots interactively by parametrizing them with UI elements.
exponent = mo.ui.slider(1, 5, value=1, step=1, label='exponent')
mo.md(
f"""
**Visualizing powers.**
{exponent}
"""
)@mo.cache
def plot_power(exponent):
plt.plot(x, x**exponent)
return plt.gca()_tex = (
f"$$f(x) = x^{exponent.value}$$" if exponent.value > 1 else "$$f(x) = x$$"
)
mo.md(
f"""
{_tex}
{mo.as_html(plot_power(exponent.value))}
"""
)Other libraries
marimo also supports these other plotting libraries:
- Plotly
- Seaborn
- Altair
Just output their figure objects as the last expression of a cell, or embed them in markdown with mo.as_html.
If you would like another library to be integrated into marimo, please get in touch.
module_not_found_explainer = mo.md(
"""
## Oops!
It looks like you're missing a package that this tutorial
requires.
Use the package manager panel on the left to install **numpy** and **matplotlib**,
then restart the tutorial.
Or, if you use `uv`, open the tutorial with
```
uvx marimo tutorial plots
```
at the command line.
"""
).callout(kind='warn')
def check_dependencies():
if missing_packages:
return module_not_found_explainerplt_show_explainer = {
"Using `plt.show()`": """
You can use `plt.show()` or `figure.show()` to display
plots in the console area of a cell. Keep in mind that console
outputs are not shown in the app view.
"""
}try:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
missing_packages = False
except ModuleNotFoundError:
missing_packages = True
if not missing_packages:
matplotlib.rcParams['figure.figsize'] = (6, 2.4)import marimo as mo