Can I generate and show a different image during each loop with Matplotlib?

31,958

try this:

import numpy
from matplotlib import pyplot as plt

if __name__ == '__main__':
    x = [1, 2, 3]
    plt.ion() # turn on interactive mode
    for loop in range(0,3):
        y = numpy.dot(x, loop)
        plt.figure()
        plt.plot(x,y)
        plt.show()
        _ = input("Press [enter] to continue.")

if you want to close the previous plot, before showing the next one:

import numpy
from matplotlib import pyplot as plt
if __name__ == '__main__':
    x = [1, 2, 3]
    plt.ion() # turn on interactive mode, non-blocking `show`
    for loop in range(0,3):
        y = numpy.dot(x, loop)
        plt.figure()   # create a new figure
        plt.plot(x,y)  # plot the figure
        plt.show()     # show the figure, non-blocking
        _ = input("Press [enter] to continue.") # wait for input from the user
        plt.close()    # close the figure to show the next one.

plt.ion() turns on interactive mode making plt.show non-blocking.

and heres is a duplicate of your matlab code:

import numpy
import time
from matplotlib import pyplot as plt

if __name__ == '__main__':
    x = [1, 2, 3]
    plt.ion()
    for loop in xrange(1, 4):
        y = numpy.dot(loop, x)
        plt.close()
        plt.figure()
        plt.plot(x,y)
        plt.draw()
        time.sleep(2)
Share:
31,958
Nazmul
Author by

Nazmul

Updated on September 11, 2020

Comments

  • Nazmul
    Nazmul over 3 years

    I am new to Matplotlib and Python. I mostly use Matlab. Currently, I am working with a Python code where I want to run a loop. In each loop, I will do some data processing and then show an image based on the processed data. When I go to the next loop, I want the previously stored image to be closed and generate a new image based on the latest data.

    In other words, I want a python code equivalent to the following Matlab code:

    x = [1 2 3];
    
    for loop = 1:3
    
        close all;
    
        y = loop * x;
    
        figure(1);
    
        plot(x,y)
    
        pause(2)
    
    end
    

    I tried the following python code to achieve my goal:

    import numpy as np
    import matplotlib
    import matplotlib.lib as plt
    
    from array import array
    from time import sleep
    
    if __name__ == '__main__':
    
        x = [1, 2, 3]
    
        for loop in range(0,3):
    
            y = numpy.dot(x,loop)
    
            plt.plot(x,y)
    
           plt.waitforbuttonpress
    
        plt.show()
    

    This code puts all plots superimposed in the same figure. If I put the plt.show() command inside the for loop, only the first image is shown. Therefore, I could not replicate my Matlab code in Python.