Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Show consecutive images/arrays with imshow as repeating animation in python

I have calculated some results and they are in the form of 64x64 arrays. Each array is created some time after the other. I want to show these arrays one after the other, like an animation. I have tried many ways, and got none to work. Im am quite frustrated and the questions on SO regarding animations have not been able to help me get this to work. This is not the first time I try this, every time my result is the same though: I have never gotten this to work.

The approaches I have tried:

dynamic image

dynamic image 2

simple animation

The current code I have:

fig, ax = plt.subplots()
def animate(i):
    return imagelist[i] 
def init():
    fig.set_data([],[])
    return fig
ani = animation.FuncAnimation(fig, animate, np.arange(0, 19), init_func=init,
interval=20, blit=True)
plt.show()

Here imagelist is a list of the arrays I mention above (length 20, 0 through 19). My question is how can I get this to work?

like image 493
Leo Avatar asked Dec 11 '22 11:12

Leo


2 Answers

Copying almost exactly from your first link (and adding some comments):

hmpf = ones([4,4])
hmpf[2][1] = 0
imagelist = [ hmpf*i*255./19. for i in range(20) ]

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure() # make figure

# make axesimage object
# the vmin and vmax here are very important to get the color map correct
im = plt.imshow(imagelist[0], cmap=plt.get_cmap('jet'), vmin=0, vmax=255)

# function to update figure
def updatefig(j):
    # set the data in the axesimage object
    im.set_array(imagelist[j])
    # return the artists set
    return [im]
# kick off the animation
ani = animation.FuncAnimation(fig, updatefig, frames=range(20), 
                              interval=50, blit=True)
plt.show()

This animates as I expect

like image 106
tacaswell Avatar answered Apr 27 '23 06:04

tacaswell


Are you running in an interactive python session in Spyder? If so, you may need to run

    %matplotlib qt

To make sure that the animation opens in its own window, rather than being displayed inline (it doesn't work inline).

Also, make sure that you are not falling for the calling animation.FuncAnimation inside a function issue

like image 43
DrMcCleod Avatar answered Apr 27 '23 08:04

DrMcCleod