Interactive matplotlib using ipywidgets

13,275

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.

Share:
13,275

Related videos on Youtube

Yas
Author by

Yas

Updated on June 04, 2022

Comments

  • Yas
    Yas almost 2 years

    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);
    

    enter image description here

    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);
    

    enter image description here

    • mdornfe1
      mdornfe1 about 7 years
      Did you ever find a way to get the second example to work? I have the same problem right now.
  • tfv
    tfv almost 7 years
    For me, the second approach does not work for the notebook backend. No graph is shown at all.
  • Quant
    Quant over 6 years
    I recommend using ipympl (aka jupyter-matplotlib), which is the notebook backend split into a separate package. The reason for the split is that release cycles of Jupyter are much faster than matplotlib. ipympl is separated from matplotlib to be able to track this better.
  • jmborr
    jmborr almost 6 years
    Also, fig.show() is necessary in order to show the canvas.