Search code examples
pythonmatplotlibjupyter-notebook

Using %matplotlib notebook after %matplotlib inline in Jupyter Notebook doesn't work


I am using Jupyter Notebook for plotting piechart figures.

In first cell with my code I have a magic command %matplotlib inline and after this magic command I run my code, everything works fine and my figure renders.

But in second cell when I set %matplotlib notebook for interactive plotting my figure won't render after running this second cell.

I need to restart kernel and run cell with %matplotlib notebook again and cannot run %matplotlib inline command before that.

Here is my code for first cell with %matplotlib inline, which renders fine:

import matplotlib.pyplot as plt

%matplotlib inline

labels = "No", "Yes"
sizes = [100, 50]

fig, ax = plt.subplots(figsize=(6, 6))

_, texts, autotexts = ax.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%',
             shadow=False, startangle=90)

ax.axis('equal')

After that I have second cell with same code, just %matplotlib inline is changed to %matplotlib notebook. Figure won't render after I run this cell and I need to restart kernel and run this cell again.

Why?


Solution

  • You just have the wrong order of your commands. A backend should be set before importing pyplot in jupyter. Or in other words, after changing the backend, pyplot needs to be imported again.

    Therefore call %matplotlib ... prior to importing pyplot.

    In first cell:

    %matplotlib inline
    import matplotlib.pyplot as plt
    plt.plot([1,1.6,3])
    

    In second cell:

    %matplotlib notebook
    #calling it a second time may prevent some graphics errors
    %matplotlib notebook  
    import matplotlib.pyplot as plt
    plt.plot([1,1.6,3])