How to update a plot in matplotlib? How to update a plot in matplotlib? tkinter tkinter

How to update a plot in matplotlib?


You essentially have two options:

  1. Do exactly what you're currently doing, but call graph1.clear() and graph2.clear() before replotting the data. This is the slowest, but most simplest and most robust option.

  2. Instead of replotting, you can just update the data of the plot objects. You'll need to make some changes in your code, but this should be much, much faster than replotting things every time. However, the shape of the data that you're plotting can't change, and if the range of your data is changing, you'll need to manually reset the x and y axis limits.

To give an example of the second option:

import matplotlib.pyplot as pltimport numpy as npx = np.linspace(0, 6*np.pi, 100)y = np.sin(x)# You probably won't need this if you're embedding things in a tkinter plot...plt.ion()fig = plt.figure()ax = fig.add_subplot(111)line1, = ax.plot(x, y, 'r-') # Returns a tuple of line objects, thus the commafor phase in np.linspace(0, 10*np.pi, 500):    line1.set_ydata(np.sin(x + phase))    fig.canvas.draw()    fig.canvas.flush_events()


You can also do like the following:This will draw a 10x1 random matrix data on the plot for 50 cycles of the for loop.

import matplotlib.pyplot as pltimport numpy as npplt.ion()for i in range(50):    y = np.random.random([10,1])    plt.plot(y)    plt.draw()    plt.pause(0.0001)    plt.clf()


This worked for me. Repeatedly calls a function updating the graph every time.

import matplotlib.pyplot as pltimport matplotlib.animation as animdef plot_cont(fun, xmax):    y = []    fig = plt.figure()    ax = fig.add_subplot(1,1,1)    def update(i):        yi = fun()        y.append(yi)        x = range(len(y))        ax.clear()        ax.plot(x, y)        print i, ': ', yi    a = anim.FuncAnimation(fig, update, frames=xmax, repeat=False)    plt.show()

"fun" is a function that returns an integer.FuncAnimation will repeatedly call "update", it will do that "xmax" times.