Panel apps
Environment requirements
Section titled “Environment requirements”Your conda environment (used in JHub Apps Launcher’s App creation form) must have the following packages for successful app deployment:
jhsingle-native-proxy>= 0.8.2panelbokeh-root-cmd>= 0.1.2nbconvert- Other libraries used in the app
Code requirements
Section titled “Code requirements”If you use Panel templates, for example the Material template, make sure to use it through pn.template.MaterialTemplate() instead of pn.extension(design='material', template='material').
You can write Panel apps in Jupyter Notebooks or Python scripts. If you use Jupyter Notebooks, you need to include nbconvert in your conda environment.
Example application
Section titled “Example application”To deploy the Panel Iris Kmeans Example using JHub Apps, you can use the following (slightly updated) code and environment:
Code (Jupyter Notebook)
In a Jupyter Notebook, copy the following lines of code.
import numpy as npimport pandas as pdimport panel as pnimport hvplot.pandas
from sklearn.cluster import KMeansfrom bokeh.sampledata import iris
pn.extension()
flowers = iris.flowers.copy()cols = list(flowers.columns)[:-1]
x = pn.widgets.Select(name='x', options=cols)y = pn.widgets.Select(name='y', options=cols, value='sepal_width')n_clusters = pn.widgets.IntSlider(name='n_clusters', start=1, end=5, value=3)
def get_clusters(x, y, n_clusters): kmeans = KMeans(n_clusters=n_clusters, n_init='auto') est = kmeans.fit(iris.flowers.iloc[:, :-1].values) flowers['labels'] = est.labels_.astype('str') centers = flowers.groupby('labels')[[x] if x == y else [x, y]].mean() return ( flowers.sort_values('labels').hvplot.scatter( x, y, c='labels', size=100, height=500, responsive=True ) * centers.hvplot.scatter( x, y, marker='x', c='black', size=400, padding=0.1, line_width=5 ) )
widgets = pn.WidgetBox( pn.Column( """This app provides an example of **building a simple dashboard using Panel**.\n\nIt demonstrates how to take the output of **k-means clustering on the Iris dataset** using scikit-learn, parameterizing the number of clusters and the variables to plot.\n\nThe entire clustering and plotting pipeline is expressed as a **single reactive function** that responsively returns an updated plot when one of the widgets changes.\n\n The **`x` marks the center** of the cluster.""", x, y, n_clusters ))
clusters = pn.pane.HoloViews( pn.bind(get_clusters, x, y, n_clusters), sizing_mode='stretch_width')
dashboard = pn.template.MaterialTemplate( title="Iris K-Means Clustering", sidebar = [widgets], main=[clusters],)
dashboard.servable()Environment specification
Use the following spec to create a conda environment wherever JHub Apps is deployed. If using Nebari, use this spec to create an environment with conda-store.
name: panel-iris-kmeans-appchannels: - conda-forgedependencies: - numpy - pandas - hvplot - panel - bokeh - ipykernel - scikit-learn - jhsingle-native-proxy>=0.8.2 - bokeh-root-cmd - nbconvert - bokeh_sampledata