[Matplotlib-users] plot

Scott Lasley selasley at icloud.com
Fri May 31 18:34:41 EDT 2019


Are you making the plots in a jupyter notebook?  The code worked for me in ipython and when saved as a file and run from the command line, but it does produce multiple plots in a jupyter notebook.  

plt.pause does not seem to work in a notebook.  The documentation for plt.pause says "This can be used for crude animation. For more complex animation, see matplotlib.animation."  The snippet below is based on the matplotlib simple animation example (https://matplotlib.org/examples/animation/basic_example.html) It works in a jupyter notebook if you use the magic
%matplotlib notebook 
or 
%matplotlib nbagg
but it does not work in jupyter lab since those magics are not supported.


%matplotlib nbagg

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.animation import FuncAnimation


def draw_pts(i):
    y[i] = np.random.randint(10, 100)
    pts.set_data(x, y)
    ax.relim()
    ax.autoscale_view(scaley=True)
    return [pts]

def init_pts():
    return []

x = np.arange(1, 6)
# set y to nan's so no points are drawn initially
y = np.full(5, np.nan)

fig, ax = plt.subplots()
ax.set(xlim=[0, 6])
pts = ax.plot(x, y, 'o')[0]

anim = FuncAnimation(fig, 
                     draw_pts, 
                     frames=5, 
                     init_func=init_pts,
                     interval=2000, 
                     blit=True,
                     repeat=False)



Notes: If init_func is not set, draw_pts is called twice with i = 0, so I used a dummy init_pts function.   ax.autoscale_view works in the jyputer notebook but the y axis does not update properly if the code is run in ipython on my mac.  If repeat=True, draw_pts will be called forever with i ranging from 0 to frames - 1 repeatedly.  interval sets the delay between updates in milliseconds.

hth,
Scott

> On May 31, 2019, at 12:11 PM, Partha Sinha <pnsinha68 at gmail.com> wrote:
> 
> It worked. However, I was looking for in one graph but here it's producing n no of graphs. can we make it in the graph ?
> partha
> 
> 
> On Fri, 31 May 2019 at 21:10, Scott Lasley <selasley at icloud.com> wrote:
> Try using plt.pause instead of time.sleep.  This may do what you want
> 
> import matplotlib.pyplot as plt
> from random import randint
> 
> numbers = [0]*5
> # draw the initial points
> oldlines = plt.plot(range(1, 6), numbers, 'o', c='r')
> plt.pause(5)
> for i in range(5):
>     numbers[i] = randint(0,100)
>     # remove the previously plotted lines before drawing the new ones
>     oldlines[0].remove()
>     oldlines = plt.plot(range(1, 6), numbers, 'o', c='r')
>     plt.pause(5)
> 
> 
> 
> > On May 31, 2019, at 5:07 AM, Partha Sinha <pnsinha68 at gmail.com> wrote:
> > 
> > I want help on graph
> > I need to plot numbers one by one (lets say after interval of 5 sec) but all in the same graph. How to do ?
> > My code is below
> > 
> > 
> > import time    
> > import matplotlib.pyplot as plt
> > import numpy as np
> > from random import randint
> > i = 1
> > numbers = [0]*5
> > while i < 5:
> >      numbers[i] = randint(0,100)
> >      plt.plot(np.arange(1,6),numbers, 'o')
> >      i += 1
> >      matplotlib.pyplot.draw()
> >      time.sleep(5)
> > _______________________________________________
> > Matplotlib-users mailing list
> > Matplotlib-users at python.org
> > https://mail.python.org/mailman/listinfo/matplotlib-users
> 



More information about the Matplotlib-users mailing list