Skip to content
Advertisement

Display numpy array in a for loop using matplotlib imshow

I have a numpy array whose elements are updated in a for loop:

a = np.array([[1,2,3],[4,5,6],[7,8,9]])

for t in range(0,10):
    imshow(a)

    for i in range(0,a.shape[0]):
        for j in range(0,a.shape[1]):
            a[i][j] += 1

I want to display the array at each iteration, but imshow() doesn’t work, it just displays the image once the loop terminates.

ps. I’m using an Ipython notebook

I found different things on the web but none of them work on my computer (for example I tried to use matplotlib’s animation module)

The strange thing is that if I try to execute this example (http://matplotlib.org/examples/animation/dynamic_image2.html) using the standard python prompt everything works fine, while on the Ipython notebook it doesn’t work. Can anyone explain me why?

notes:

Maybe I oversimplified my code;

I’m working on a forest-fire model, the array is a grid filled with 0 = empty site, 1 = tree, 2 = fire.

At each time step (iteration):

  1. a tree is dropped on a randomly chosen site and if the site is free the tree is planted
  2. a tree ignites with a probability f

I want to display the array using a colormap to visualize the evolution of my model

Advertisement

Answer

imshow(a) will plot the values of the array a as pixel values, but it won’t display the plot. To view the image after each iteration of the for loop, you need to add show().

This should do what you want:

from matplotlib.pyplot import imshow, show    

a = np.array([[1,2,3],[4,5,6],[7,8,9]])

for t in range(0,10):
    imshow(a)
    show()

    for i in range(0,a.shape[0]):
        for j in range(0,a.shape[1]):
            a[i][j] += 1
Advertisement