делать снимки каждую секунду, используя анимацию художника - PullRequest
2 голосов
/ 01 марта 2012

Я использую эту функцию:

def Plot(data):

    plt.colormaps()
    n=sc.shape(data)[2]
    ims=[]
    for i in range(n):
        mydata=data[:,:,i]
        im=plt.imshow(mydata,cmap=plt.get_cmap('jet'))
        ims.append([im])
    return ims

и назовите это как:

fig=plt.gcf()
ani=ArtistAnimation(fig,result,interval=10,repeat=False)
plt.show()

Я хочу спросить, возможно ли делать снимки сюжета (анимации), например, каждую 1 секунду.

(я использую matplotlib)

1 Ответ

2 голосов
/ 01 марта 2012

Вы можете создать подкласс ArtistAnimation и переписать метод _step, например:

class SnapShotAnimation(ArtistAnimation):
    def __init__(self, fig, artists, snapshot_delay, *args, **kwargs):
        self._snapshot_delay = snapshot_delay
        self._time_to_snapshot = snapshot_delay
        ArtistAnimation.__init__(self, fig, artists, *args, **kwargs)

    def _step(self, *args):
        if self._time_to_snapshot <= 0:
            do_snapshot() 
            self._time_to_snapshot = self._snap_shot_delay #reset timer
        else:
            self._time_to_snapshot -= self._interval
        ArtistAnimation._step(*args) #ancestor method maybe better at start

    def do_snapshot(self):
        """Your actual snapshot code comes here - basically saving to a output"""
        fname = 'snapshot.png'
        self._fig.savefig(fname)

добавив:

snapshot_delay = 1000 # time in ms

, изменив:

ani=SnapShotAnimation(fig,result,snapshot_delay, interval=10,repeat=False)

вваш пример источника.

Для лучшего понимания, что и как делать, я бы рекомендовал взглянуть на matplotlib sources .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...