Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
holoviz
GitHub Repository: holoviz/panel
Path: blob/main/doc/how_to/streamlit_migration/panes.md
2012 views

Display Objects with Panes

In Panel the objects that can display your Python objects are called panes. With Panels panes you will be able to:

  • Get notifications about interactions like click events on your plots and tables and react to them.

  • Use unique data visualization ecosystems like HoloViz, ipywidgets and VTK.

Check out the Panes Section of the Component Gallery for the full list of panes.


Migration Steps

To display content in Panel:

  • Replace your Streamlit st.some_object snake cased functions with the corresponding Panel pn.pane.SomeObject CamelCased classes.

  • Replace your Streamlit text elements with pn.pane.Markdown.

Identify the relevant Panel panes in the Panes Section of the Component Gallery.

Examples

Matplotlib Pane

Streamlit Matplotlib Example

import numpy as np import streamlit as st import matplotlib.pyplot as plt data = np.random.normal(1, 1, size=100) fig, ax = plt.subplots(figsize=(8,4)) ax.hist(data, bins=20) st.pyplot(fig)

Streamlit Matplotlib Example

Panel Matplotlib Example

You will find Panels panes in the pn.pane module.

We use Matplotlibs Figure interface instead of the pyplot interface to avoid memory leaks if you forget to close the figure. This is all described in the Matplotlib Guide.

import panel as pn import numpy as np from matplotlib.figure import Figure pn.extension(sizing_mode="stretch_width", template="bootstrap") data = np.random.normal(1, 1, size=100) fig = Figure(figsize=(8,4)) ax = fig.subplots() ax.hist(data, bins=20) pn.pane.Matplotlib(fig, format='svg', sizing_mode='scale_both').servable()

Panel Matplotlib Example

Markdown Pane

You can replace st.markdown with pn.pane.Markdown.

You can also use the Markdown pane to replace the text elements st.title, st.header, st.sub_header, st.code and st.text.

You may use the Markdown pane to replace st.divider and st.latex, but you can also use the specialized Panel components pn.layout.Divider and pn.pane.LaTeX.

Here is how to do it

import panel as pn pn.extension("mathjax", sizing_mode="stretch_width", template="bootstrap") pn.pane.Markdown(r""" # Title ## Header ### Sub Header ```python import panel as pn pn.extension() ``` --- $$ a + ar + a r^2 + a r^3 + \cdots + a r^{n-1} = \sum_{k=0}^{n-1} ar^k = a \left(\frac{1-r^{n}}{1-r}\right)$$ """).servable()

Panel Markdown Example