I want to implement an interactive plot using Matplotlib and ipywidgets in IPython (python3). So, how I can do this efficiently (change smoothly without delay)?
And another question is why this code works?!
from ipywidgets import *
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = np.linspace(0, 2 * np.pi)
def update(w = 1.0):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, np.sin(w * x))
fig.canvas.draw()
interact(update);
But, this doesn't work?!
from ipywidgets import *
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
x = np.linspace(0, 2 * np.pi)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
line, = ax.plot(x, np.sin(x))
def update(w = 1.0):
line.set_ydata(np.sin(w * x))
fig.canvas.draw()
interact(update);
The interact function ( ipywidgets. interact ) automatically creates user interface (UI) controls for exploring code and data interactively. It is the easiest way to get started using IPython's widgets.
You can make a plot in matplotlib, add interactive functionality with plugins that utilize both Python and JavaScript, and then render it with D3. mpld3 includes built-in plugins for zooming, panning, and adding tooltips (information that appears when you hover over a data point).
The second approach is the right one for the notebook backend
%matplotlib notebook
Or with ipympl.
However, it won't work with the inline backend which does not update the plot.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With