|
From: Gousios G. <gg...@wi...> - 2012-01-23 16:41:28
|
Στις 21/01/2012 07:43 μμ, ο/η Gousios George έγραψε: > Στις 21/01/2012 07:05 μμ, ο/η Tony Yu έγραψε: >> >> >> On Sat, Jan 21, 2012 at 11:31 AM, Gousios George >> <gg...@wi... <mailto:gg...@wi...>> wrote: >> >> Στις 21/01/2012 04:54 μμ, ο/η Tony Yu έγραψε: >>> >>> >>> On Sat, Jan 21, 2012 at 9:07 AM, Gousios George >>> <gg...@wi... <mailto: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() > Now,it gives me 2 figures (why 2?) but empty.(maybe i didn't convert > right the matlab code below?) > The data in the showGraphs function is the result from this function > (in matlab): > ......... > grids = zeros(n, n, t + 1); > grids(:, :, 1) = rest; > for i = 2:(t + 1) > Extended = extendLat1(rest); > rest = applyExtended(Extended); > grids(:, :, i) = rest; > end; > > And i did this in python: > > grids=sc.zeros((area,area,t+1)) > rest=grids[:,:,0] > for i in range(1,t): > extended=extend(rest) > rest=apply_extend(extended) > grids[:,:,i]=rest > return grids > > Thanks for helping! > Any help?Thanks! |