On Sat, Jan 21, 2012 at 11:31 AM, Gousios George <gg...@windowslive.com>wrote:

> **
> Στις 21/01/2012 04:54 μμ, ο/η Tony Yu έγραψε:
>
>
>
> On Sat, Jan 21, 2012 at 9:07 AM, Gousios George <gg...@windowslive.com>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()
------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to