|
From: Tony Yu <ts...@gm...> - 2012-01-21 17:05:17
|
On Sat, Jan 21, 2012 at 11:31 AM, Gousios George <gg...@wi...>wrote: > ** > Στις 21/01/2012 04:54 μμ, ο/η Tony Yu έγραψε: > > > > On Sat, Jan 21, 2012 at 9:07 AM, Gousios George <gg...@wi...>wrote: > >> Hello , i have the following code in matlab and trying to do it in >> matplotlib. >> >> I have this code in matlab (in a function showGraphs): >> ... >> m = size(myList, 3); >> for k = 1:m >> g = myList(:, :, k); >> image(g + 1) >> axis off >> axis square >> M(k) = getframe; >> end; >> >> and in another file (another function): >> ... >> M = showGraphs(grids) >> movie(M, 1) >> >> >> >> I did so far: >> >> def showGraphs(data): >> data=sc.array([data]) >> n=sc.shape(data)[2] >> for k in range(n): >> mydata=data[:,:,k] >> #plt.imshow(mydata+1) -->> this doesn't work >> >> Also ,in order to do the animation : >> >> grids=...(result from another function) >> result=showGraph(grids) >> fig=plt.figure() >> ani=animation.FuncAnimation(fig,result,interval=30,blit=True) >> plt.show() >> >> Right now the program says "TypeError: 'NoneType' object is not >> callable" (it has errors in the animation call) >> >> What should be my approach to this in order to have the animation? >> >> Thank you! >> >> > You're getting that error because the second argument to FuncAnimation > (`result` in your example) should be a function (not always; see example 2 > linked below). Right now, if your `showGraphs` function is defined in full, > it returns a value of None, which gets saved to `result` (hence the error). > > You should take a look at some of the image animation examples (ex1<http://matplotlib.sourceforge.net/examples/animation/dynamic_image.html>, > ex2<http://matplotlib.sourceforge.net/examples/animation/dynamic_image2.html> > ). > > -Tony > > > I did now : > > > def showGraphs(data): > data=sc.array([data]) > n=sc.shape(data)[2] > ims=[] > > for k in range(n): > mydata=data[:,:,k] > im=plt.imshow(mydata+1) > ims.append([im]) > return ims > > and now it gives me "TypeError: Invalid dimensions for image data. > > Please post short, but executable examples when possible. I'm not sure what your data looks like, but your call to `sc.array` is strange (I'm not sure why you have square brackets, which effectively adds an unnecessary dimension to your data). The code attached below should work. Cheers, -Tony import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import ArtistAnimation fig = plt.figure() def showGraphs(data): data = np.asarray(data) # unnecessary in this example n = np.shape(data)[2] ims = [] #for mydata in np.rollaxis(data, -1): for k in range(n): mydata = data[:, :, k] im = plt.imshow(mydata) ims.append([im]) return ims # 5 frames of a random 20 x 20 image data = np.random.uniform(size=(20, 20, 5)) ims = showGraphs(data) ani = ArtistAnimation(fig, ims) plt.show() |