In [1]:
# Auto-generated by leda
import leda


leda.set_interact_mode(leda.StaticIpywidgetsInteractMode())
In [2]:
# Auto-generated by leda
import os

from leda.vendor.static_ipywidgets.static_ipywidgets     import interact as static_interact


static_interact.IMAGE_MANAGER = static_interact.InlineImageManager()

leda demo: matplotlib¶

In [3]:
import dataclasses

import leda
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
In [4]:
leda.init("matplotlib")
plt.rcParams.update({"figure.max_open_warning": 0})
In [5]:
%%HTML
<!-- Auto-generated by leda -->
<h2>Table of Contents</h2>
  <ol type='I'>
  <li type='I'><a href='#leda-demo:-matplotlib'>leda demo: matplotlib</a></li>
    <ol type='A'>
    <li type='A'><a href='#Info'>Info</a></li>
    <li type='A'><a href='#Data'>Data</a></li>
    <li type='A'><a href='#Visualization'>Visualization</a></li>
      <ol type='1'>
      <li type='1'><a href='#Simple'>Simple</a></li>
      <li type='1'><a href='#Objects-as-Params'>Objects as Params</a></li>
      </ol>
    </ol>
  </ol>

Table of Contents

  1. leda demo: matplotlib
    1. Info
    2. Data
    3. Visualization
      1. Simple
      2. Objects as Params

Info¶

Widgets

Use the %%interact expr0;expr1;... cell magic to set widgets for that cell.

Each expression is of the form x=y, where x becomes the local var of the cell and y can be a:

  • list to indicate choices for a dropdown widget
  • tuple to indicate values for an int slider (start, stop, and optional step).

E.g.:

%%interact column=list(df.columns)
%%interact column=list(df.columns);mult=[1, 2, 3]
%%interact column=list(df.columns);window=(10, 50)
%%interact column=list(df.columns);window=(10, 50, 5)

Table of Contents

Use the %toc line magic to substitute with a table of contents in static mode.

Toggles

Click the Toggle input cells button at the bottom to reveal input cells.

Data¶

Using randomly generated data (with fixed seed).

In [6]:
df = pd.DataFrame(np.random.RandomState(42).rand(100, 10), columns=list("abcdefghij"))

Visualization¶

Simple¶

In [7]:
%%interact column=list(df.columns);mult=[1, 2, 3]
(df[[column]] * mult).plot(figsize=(15, 8), lw=2, title=f"column={column!r}, mult={mult}")
Generating results: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 30/30 [00:00<00:00, 47.39it/s]
Generating HTML: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 30/30 [00:04<00:00,  6.95it/s]
Out[7]:
column:
mult:
In [8]:
%%interact column=list(df.columns);window=(10, 50, 5)
ax = df[[column]].iloc[-window:].plot(figsize=(15, 8), lw=2,
                                      title=f"column={column!r}, window={window}")
ax
Generating results: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 90/90 [00:02<00:00, 41.32it/s]
Generating HTML: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 90/90 [00:12<00:00,  7.49it/s]
Out[8]:
column:
window:

Objects as Params¶

In [9]:
@dataclasses.dataclass(frozen=True)
class Calculator:
    def calc(self, df: pd.DataFrame) -> pd.DataFrame:
        raise NotImplementedError


@dataclasses.dataclass(frozen=True)
class CumSumCalculator(Calculator):
    def calc(self, df: pd.DataFrame) -> pd.DataFrame:
        return df.cumsum()

    
@dataclasses.dataclass(frozen=True)
class EWMMeanCalculator(Calculator):
    com: float
    
    def calc(self, df: pd.DataFrame) -> pd.DataFrame:
        return df.ewm(com=self.com).mean()
    

calcs = [CumSumCalculator(), EWMMeanCalculator(com=5), EWMMeanCalculator(com=10)]
In [10]:
%%interact column_group=["abc", "def", "ghij"];calc=calcs
calced_df = calc.calc(df[list(column_group)])
calced_df.plot(figsize=(15, 8), lw=2, title=f"column_group={column_group!r}, calc={calc}")
Generating results: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 46.43it/s]
Generating HTML: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [00:01<00:00,  6.73it/s]
Out[10]:
calc:
column_group:

In [11]:
# Auto-generated by leda
import leda


leda.show_input_toggle()
Out[11]:
In [12]:
# Auto-generated by leda
import leda


leda.show_std_output_toggle()
Out[12]: