There are often parameters to a matplotlib function that are Scalar. For example
axhline. These can be convenient to tie to the value of a single slider. While you can do this by making a function such as:
def f(*arg, **kwargs): return kwargs.pop('vmin', 0)
this can be a bit of hassle to do every time. So instead
mpl_interactions does this for you when you pass an indexed
Controls object or a tuple or other abbreviation to a scalar argument.
# %load_ext autoreload %matplotlib ipympl # %autoreload 2 import matplotlib.pyplot as plt import numpy as np from mpl_interactions import ipyplot as iplt from mpl_interactions.controller import Controls # import to make it easier to create
You don't need to pre-create the slider, you can do this directly in the function. Although then the name attached to the slider will be the same as the matplotlib argument.
So another way to get the same result as above is to do:
x = np.random.randn(20) y = 2 * x + np.random.randn(20) / 2 fig, ax = plt.subplots() ctrls = iplt.scatter(x, y, s=(10, 1000))
You can also pass an indexed controls object directly to a scalar argument. This is a convenient way to link the same slider to multiple different functions.
x2 = np.random.randn(20) y2 = -2 * x2 - np.random.randn(20) / 2 fig, ax = plt.subplots() ctrls = iplt.scatter(x, y, s=(10, 1000)) _ = iplt.scatter(x2, y2, s=ctrls["s"])
If you create the slider to control the scalar by passing a tuple then the slider will always be named according to the matplotlib argument. For example, above the sliders were always named
s. If you'd like to name them something else then you can precreate the slider.
Note that we need to explictl display the controls here because they will only be automatically displayed if they were created by an
from mpl_interactions.controller import Controls # create the controls object ctrls = Controls(size=(10, 1000)) fig, ax = plt.subplots() ctrls = iplt.scatter(x, y, s=ctrls["size"]) _ = iplt.scatter(x2, y2, s=ctrls["size"]) # ctrls.show() # ctrls.display() # or when in a jupyter notebook display(ctrls)