2012-07-23 4 views
18

애니메이션 그래프를 만드는 방법이 있습니까? 서로 다른 매개 변수를 사용하여 동일한 그래프를 보여주는 예입니다. 예를 들어ipython 노트북의 애니메이션 그래프

는 SAGE 노트북입니다, 하나는 쓸 수 있습니다 :

a = animate([circle((i,i), 1-1/(i+1), hue=i/10) for i in srange(0,2,0.2)], 
      xmin=0,ymin=0,xmax=2,ymax=2,figsize=[2,2]) 
a.show() 

답변

7

업데이트 : 2006 년 1 월 2014 년

제이크 Vanderplas가 here 가능하기 matplotlib 애니메이션을위한 자바 스크립트 기반의 패키지를 만들었습니다.

Example of Jake's JSAnimation package

# https://github.com/jakevdp/JSAnimation 
from JSAnimation import examples 
examples.basic_animation() 
가 자세한 설명과 예제 his blog post를 참조하십시오 그것을 사용으로 간단합니다. 역사 대답

예, 자바 스크립트의 업데이트가 제대로 아직 이미지 프레임을 보유하지 않는다 (보정에 대한 goger 참조), 플리커가있다, 그러나 당신은이 기술을 사용하여 아주 간단한 일을 수행 할 수 있습니다

import time, sys 
from IPython.display import clear_output 
f, ax = plt.subplots() 

for i in range(10): 
    y = i/10*sin(x) 
    ax.plot(x,y) 
    time.sleep(0.5) 
    clear_output() 
    display(f) 
    ax.cla() # turn this off if you'd like to "build up" plots 
plt.close() 
+0

아마도 합리적인 x 값을 추가 할 수 있습니까? 간단한 범위 (100)와 numpy.arange (0, 2 * pi, 0.01)로 예제를 시도했지만 멋진 출력을 생성하지 못합니다. 또한이 코드를 실행하기 위해 일부 가져 오기가 누락 된 것 같습니다 –

+0

이 말은 나중에 몇 년입니다 ** ** 깜박임을 피하기 위해'clear_output (True)'를 설정하십시오 (IPython 2.0.0) –

+0

고마워요 @eldad! 나는 이것을 다시 업데이트해야한다. –

9

이것은 끔찍한 깜박 거림이지만 최소한 이것은 나를 위해 움직이는 음모를 만듭니다. 그것은 Aron 's를 기반으로하지만 Aron 's는있는 그대로 작동하지 않습니다.

import time, sys 
from IPython.core.display import clear_output 
f, ax = plt.subplots() 

n = 30 
x = array([i/10.0 for i in range(n)]) 
y = array([sin(i) for i in x]) 
for i in range(5,n): 
    ax.plot(x[:i],y[:i]) 
    time.sleep(0.1) 
    clear_output() 
    display(f) 
    ax.cla() # turn this off if you'd like to "build up" plots 
plt.close() 
5

IPython 노트북을 사용하는 경우 v2.0 이상은 interactive widgets을 지원합니다. 당신은 좋은 예제 노트북을 찾을 수 있습니다 here (n.b. 당신은 다운로드하고 자신의 컴퓨터에서 슬라이더를 볼 필요가 실행).

기본적으로 interact을 가져온 다음 매개 변수 범위를 매개 변수로 전달합니다. 예를 들면, 제 2 링크에서 :

In [8]: 
def pltsin(f, a): 
    plot(x,a*sin(2*pi*x*f)) 
    ylim(-10,10) 
In [9]: 
interact(pltsin, f=(1,10,0.1), a=(1,10,1)); 

fa 두 슬라이더와 플롯을 생성한다.

+0

iPython 노트북에서 다른 종류의 것을 움직이기 위해 노력하고 있는데, 이것은 지금까지 발견 한 최상의 해결책과 같이 보인다. 사용자가 슬라이더를 조작하지 않아도되도록 자동으로 애니메이션을 만들 수있는 방법이 있습니까? – Addem

+0

나는 이것을하는 것이 사소한 것이라고 생각하지 않는다. 그러나 '이벤트'페이지를 살펴보십시오. 콜백을 사용하여 프로그래밍 방식으로 위젯을 제어하는 ​​예제가 있습니다. 따라서 이론 상으로는 버튼을 가질 수 있습니다. 버튼을 클릭하면 슬라이더/컨트롤을 조절하는'for' 루프가 실행되고 그 사이에 잠들 수 있습니다. 그것은 누군가가 컨트롤을 수동으로 슬라이딩시키는 효과를 가질 것입니다. 그러나 이상적이지 않습니다. – Luciano

5

IPython widgets을 사용하면 노트북의 GUI 객체로 커널에서 파이썬 객체를 조작 할 수 있습니다. Sage hosted IPython Notebooks을 (를) 좋아할 수도 있습니다. 노트북에서 위젯이나 대화 형 기능을 공유 할 때 발생할 수있는 한 가지 문제점은 다른 사람이 IPython을 가지고 있지 않으면 작업을 실행할 수 없다는 것입니다. 이를 해결하기 위해 도미노를 사용하여 다른 사람들이 실행할 수있는 위젯을 사용하여 share Notebooks을 사용할 수 있습니다.

다음은 팬더를 사용하여 데이터, 도형 및 3D 플롯의 슬라이더를 필터링 할 수있는 노트북에서 작성할 수있는 위젯의 세 가지 예입니다. 자세히 알아보고 코드 및 노트북 here을 참조하십시오.




enter image description here




enter image description here





당신이 살고 스트림 데이터 또는 루프로 실행하기 위해 시뮬레이션을 설정하려면

enter image description here

, 당신도 stream data 노트북에서 플롯에를 할 수 . 면책 조항 : 나는 Plotly에서 일한다.

0

@ goger의 'horrible flickering'에 대한 의견에서 clear_output (wait = True) 호출이 내 문제를 해결한다는 것을 알았습니다. 이 플래그는 clear_output에 새로운 렌더링이있을 때까지 렌더링 대기를 지시합니다.

0

matplotlib에는 animation 모듈이 있습니다. 그러나 사이트에서 제공되는 예제는 노트북에서와 같이 실행되지 않습니다. 작동 시키려면 몇 가지 조정할 필요가 있습니다.

다음은 노트북에서 수정 된 페이지의 예입니다 (굵게는). 노트북의 애니메이션 영화를 통해하고는 FFmpeg가 설치되어 있어야하고 사용하도록 구성하기 matplotlib 필요가 이루어지는 것이


import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.animation import FuncAnimation 
from matplotlib import rc from IPython.display import HTML 

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

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) rc('animation', html='html5') ani # plt.show() # not needed anymore 

참고.