Today I discovered a quick way to make functions in Jupyter Notebooks/Lab interactive. Using nothing but a function import and a decorator, I created a system for dynamically adjusting bins in a Matplotlib Pyplot histogram.

from ipywidgets import interact

#use interact decorator to [obviously] make this function interactive
@interact(bins=(1,200))
def widget_test(bins):
    """
    Demonstrate the use of Jupyter widgets in adjusting Pyplot parameters.
    """
    #import number generation and plotting libraries
    import numpy as np
    import matplotlib.pyplot as plt
    
    #set title
    plt.title("Dynamic Bucketing though Jovyan Widgetization")
    
    #define random normal distribution with Numpy
    distribution = np.random.normal(0,1,1000)
    
    #plot histogram for distribution
    plt.hist(distribution, bins=bins)