On this page

Distribution Tabs#

Download this notebook from GitHub (right-click to download).


import panel as pn
import numpy as np
import holoviews as hv

pn.extension(sizing_mode="stretch_width")

This example demonstrates how to plot several different types of outputs in a Tabs Panel, using a reactive function that depends on some widget state to update the tab contents whenever one of the dependencies changes.

distributions = {
    'NORMAL': np.random.normal,
    'UNIFORM': np.random.uniform,
    'LOG-NORMAL': np.random.lognormal,
    'EXPONENTIAL': np.random.exponential
}

checkboxes = pn.widgets.ToggleGroup(options=distributions, behavior='radio', button_type="success")
slider = pn.widgets.IntSlider(name='Number of observations', value=500, start=0, end=2000)

@pn.depends(checkboxes.param.value, slider.param.value)
def tabs(distribution, n):
    values = hv.Dataset(distribution(size=n), 'values')
    return pn.Tabs(
        ('Plot', values.hist(adjoin=False).opts(
            responsive=True, max_height=500, padding=0.1, color="#00aa41")),
        ('Summary', values.dframe().describe().T),
        ('Table', hv.Table(values)),
    )

selections = pn.Column('### Distribution Type', checkboxes, slider)
pn.Row(selections, tabs)

App#

Lets wrap it into nice template that can be served via panel serve distribution_tabs.ipynb

pn.template.FastListTemplate(site="Panel", title="Distribution Tabs", main=["This example demonstrates **how to plot several different types of outputs in a Tab**.", selections, tabs]).servable();
This web page was generated from a Jupyter notebook and not all interactivity will work on this website. Right click to download and run locally for full Python-backed interactivity.

Download this notebook from GitHub (right-click to download).