Reputation: 527
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):
I want to display the array using a colormap to visualize the evolution of my model
Upvotes: 16
Views: 26066
Reputation: 8019
For me just using show()
doesn't always work, and when it does, things tend to get very slow over time. To handle these problems, I import display
and use its display()
and clear_output()
methods.
import numpy as np
import matplotlib.pyplot as plt
from IPython import display
import time
pause_time = 0.2 # seconds between frames
a = np.random.rand(3,3)
for t in range(0,10):
plt.imshow(a)
plt.title(t)
display.display(plt.gcf())
display.clear_output(wait=True)
time.sleep(pause_time)
a = np.random.rand(3,3)
The above is adapted from this answer. The time
module is used just to let you pause the display and control the frame rate to the level you want: it is optional.
Upvotes: 1
Reputation: 593
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
Upvotes: 29