matplotlib.animation#

애니메이션 #

Matplotlib에서 라이브 애니메이션을 만드는 가장 쉬운 방법은 Animation클래스 중 하나를 사용하는 것입니다.

matplotlib.animation.FuncAnimation, matplotlib.animation.ArtistAnimation의 상속 다이어그램

Animation

애니메이션의 기본 클래스입니다.

FuncAnimation

func 함수를 반복적으로 호출하여 애니메이션을 만듭니다 .

ArtistAnimation

고정된 Artist객체 세트를 사용하는 애니메이션.

두 경우 모두 인스턴스 개체에 대한 참조를 유지하는 것이 중요합니다. Animation애니메이션은 개체가 유일한 참조를 보유 하는 타이머(일반적으로 호스트 GUI 프레임워크에서)에 의해 진행 됩니다. 개체 에 대한 참조를 보유하지 않으면 Animation개체(따라서 타이머)가 가비지 수집되어 애니메이션이 중지됩니다.

애니메이션을 저장하려면 Animation.save, Animation.to_html5_video또는 를 사용 Animation.to_jshtml하십시오.

지원되는 동영상 형식에 대한 자세한 내용은 아래 도우미 클래스 를 참조 하세요.

FuncAnimation#

의 내부 작동 방식은 대략 다음과 FuncAnimation같습니다.

for d in frames:
    artists = func(d, *fargs)
    fig.canvas.draw_idle()
    fig.canvas.start_event_loop(interval)

'블리팅'(라이브 성능을 극적으로 향상시키기 위해)을 처리하기 위한 세부 정보, 비차단, GUI 이벤트 루프를 반복적으로 시작/중지하지 않고, 반복 처리, 여러 애니메이션 축, 동영상 파일에 애니메이션을 쉽게 저장합니다.

'Blitting'은 컴퓨터 그래픽 의 표준 기술 입니다. 일반적인 요지는 기존 비트맵(우리의 경우 대부분 래스터화된 그림)을 가져온 다음 위에 아티스트를 한 명 더 '블리트'하는 것입니다. 따라서 저장된 '깨끗한' 비트맵을 관리하면 각 프레임에서 변경되는 소수의 아티스트만 다시 그릴 수 있고 상당한 시간을 절약할 수 있습니다. blitting을 사용할 때( 를 전달하여 blit=True) 핵심 루프는 FuncAnimation좀 더 복잡해집니다.

ax = fig.gca()

def update_blit(artists):
    fig.canvas.restore_region(bg_cache)
    for a in artists:
        a.axes.draw_artist(a)

    ax.figure.canvas.blit(ax.bbox)

artists = init_func()

for a in artists:
   a.set_animated(True)

fig.canvas.draw()
bg_cache = fig.canvas.copy_from_bbox(ax.bbox)

for f in frames:
    artists = func(f, *fargs)
    update_blit(artists)
    fig.canvas.start_event_loop(interval)

이것은 물론 많은 세부 사항(예: 그림의 크기를 조정하거나 완전히 다시 그릴 때 배경 업데이트)을 생략합니다. 그러나 희망적으로 미니멀한 이 예는 '블리팅'이 어떻게 작동하는지에 대한 이론과 init_func 내부 func에서 어떻게 사용 되는지에 대한 감각을 제공합니다.FuncAnimation

에 예상되는 서명 은 장부 관리 func및 플로팅 논리에서 제외 init_func하기가 매우 간단 FuncAnimation하지만 이는 전달하는 콜러블 객체가 작업해야 하는 아티스트를 알고 있어야 함을 의미합니다. 다양한 복잡성과 캡슐화를 통해 이를 처리하는 몇 가지 접근 방식이 있습니다. 스크립트의 경우 매우 잘 작동하는 가장 간단한 접근 방식은 전역 범위에서 아티스트를 정의하고 Python이 작업을 정렬하도록 하는 것입니다. 예를 들어

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = ax.plot([], [], 'ro')

def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True)
plt.show()

두 번째 방법은 functools.partial아티스트를 기능에 '바인딩'하는 데 사용하는 것입니다. 세 번째 방법은 클로저를 사용하여 필요한 아티스트와 기능을 구축하는 것입니다. 네 번째 방법은 클래스를 만드는 것입니다.

#

ArtistAnimation#

#

작가 수업 #

matplotlib.animation.FFMpegFileWriter, matplotlib.animation.FFMpegWriter, matplotlib.animation.ImageMagickFileWriter, matplotlib.animation.ImageMagickWriter, matplotlib.animation.PillowWriter, matplotlib.animation.HTMLWriter의 상속 다이어그램

제공된 작성자는 몇 가지 광범위한 범주로 분류됩니다.

Pillow 작성자는 모든 데이터를 메모리에 유지하면서 Pillow 라이브러리를 사용하여 애니메이션을 작성합니다.

PillowWriter

HTML 작성기는 JavaScript 기반 애니메이션을 생성합니다.

HTMLWriter

JavaScript 기반 HTML 영화용 작성자입니다.

파이프 기반 작성기는 캡처된 프레임을 파이프를 통해 외부 프로세스로 스트리밍합니다. 파이프 기반 변형은 성능이 더 좋은 경향이 있지만 모든 시스템에서 작동하지 않을 수 있습니다.

FFMpegWriter

파이프 기반 ffmpeg 작성기.

ImageMagickWriter

파이프 기반 애니메이션 gif.

파일 기반 작성기는 끝에 단일 파일로 연결되는 각 프레임에 대한 임시 파일을 저장합니다. 느리기는 하지만 이러한 기록기는 디버그하기가 더 쉽습니다.

FFMpegFileWriter

파일 기반 ffmpeg 작성기.

ImageMagickFileWriter

파일 기반 애니메이션 gif 작성기.

작성기 클래스는 동일한 기본 에서 순차적 프레임을 가져오는 방법을 제공합니다 Figure. 모두 순서대로 호출해야 하는 세 가지 메서드를 제공합니다.

  • setup작성자를 준비합니다(예: 파이프 열기). 파이프 기반 및 파일 기반 작성기는 setup().

  • grab_frame그런 다음 한 번에 단일 프레임을 캡처하는 데 필요한 만큼 자주 호출할 수 있습니다.

  • finish동영상을 마무리하고 출력 파일을 디스크에 씁니다.

예시:

moviewriter = MovieWriter(...)
moviewriter.setup(fig, 'my_movie.ext', dpi=100)
for j in range(n):
    update_figure(j)
    moviewriter.grab_frame()
moviewriter.finish()

작성기 클래스를 직접 사용하는 경우(통하지 않음 ) 컨텍스트 관리자 Animation.save를 사용하는 것이 좋습니다 .saving

with moviewriter.saving(fig, 'myfile.mp4', dpi=100):
    for j in range(n):
        update_figure(j)
        moviewriter.grab_frame()

필요에 따라 설정 및 정리가 수행되도록 합니다.

#

도우미 클래스 #

애니메이션 기본 클래스 #

Animation

애니메이션의 기본 클래스입니다.

TimedAnimation

Animation시간 기반 애니메이션의 하위 클래스입니다.

작성자 등록 #

Animation.save작성기 인스턴스 대신 문자열이 전달될 수 있도록 작성기 이름과 클래스 사이를 매핑하기 위해 모듈 수준 레지스트리가 제공됩니다 .

MovieWriterRegistry

사람이 읽을 수 있는 이름으로 사용 가능한 작성자 클래스의 레지스트리.

작성기 기본 클래스 #

코드 중복 기본 클래스를 줄이기 위해

AbstractMovieWriter

동영상 작성을 위한 추상 기본 클래스로, 를 호출하여 프레임을 잡는 방법을 제공합니다 grab_frame.

MovieWriter

동영상 작성을 위한 기본 클래스입니다.

FileMovieWriter

MovieWriter개별 파일에 쓰고 마지막에 스티칭합니다.

그리고 믹스인

FFMpegBase

FFMpeg 출력을 위한 믹스인 클래스.

ImageMagickBase

ImageMagick 출력을 위한 믹스인 클래스.

제공된다.

MovieWriter새 클래스 를 쉽게 구현하는 방법은 소스 코드를 참조하십시오 .