Show PyVista visualizations in Streamlit.
Take a PyVista plotter object and show it on Streamlit as an interactive-ish component (as in it can be zoomed in/out, moved and rotated, but the visualization state is not returned). It uses Panel to render PyVista plotter objects within an iframe.
pip install stpyvista
Render a cube
import streamlit as st
import pyvista as pv
from stpyvista import stpyvista
## Initialize a plotter object
plotter = pv.Plotter(window_size=[400,400])
## Create a mesh with a cube
mesh = pv.Cube()
## Add some scalar field associated to the mesh
mesh['my_scalar'] = mesh.points[:, 2] * mesh.points[:, 0]
## Add mesh to the plotter
plotter.add_mesh(mesh, scalars='my_scalar', cmap='bwr')
## Final touches
plotter.view_isometric()
plotter.add_scalar_bar()
plotter.background_color = 'white'
## Pass a key to avoid re-rendering at each page change
stpyvista(plotter, key="pv_cube")
-
By default, Community Cloud will run Python 3.12 π. Check this on New App β Advanced settings... β Python version.
-
Add
stpyvista
to therequirements.txt
file. -
Install
procps
,libgl1-mesa-glx
andxvfb
by adding them to thepackages.txt
file. -
The Community Cloud is a Debian headless machine and Pyvista requires a virtual framebuffer to work.
stpyvista.utils.start_xvfb
checks if Xvfb is running and starts it if it was not.from stpyvista.utils import start_xvfb if "IS_XVFB_RUNNING" not in st.session_state: start_xvfb() st.session_state.IS_XVFB_RUNNING = True
-
NSInternalInconsistencyException
thrown when running on macOS. Current solution is to deploy using a VM.
-
RuntimeError
thrown when running Python 3.9. Upgrading topanel>=1.4.0
or using Python 3.10 fixes this. - Buggy colormaps when using
panel==1.4.0
. This issue was fixed withpanel==1.4.1
. -
cmocean==4.0.1
will raise an exception while trying to register its colormaps to matplotlib, making PyVista to crash. This issue was fixed incmocean==4.0.3
.
- The PyVista project at https://www.pyvista.org/
- Working with Panel and Pyvista https://panel.holoviz.org
- @blackary's blog post on how to build a custom component
- Other stuff from me on https://edsaac.github.io