2016-09-23 6 views
0

다음 코드는 원 그리기의 애니메이션을 생성합니다.머리글로 마커가있는 선을 그려야합니다.

from math import cos, sin 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

def update_plot(num, x, y, line): 
    line.set_data(x[:num], y[:num]) 
    line.axes.axis([-1.5, 1.5, -1.5, 1.5]) 
    return line 

def plot_circle(): 
    x = [] 
    y = [] 
    for i in range(100): 
     x.append(cos(i/10.0)) 
     y.append(sin(i/10.0)) 

    fig, ax = plt.subplots() 
    line, = ax.plot(x, y, color = "k") 
    ani = animation.FuncAnimation(fig, update_plot, len(x), fargs=[x, y, line], interval = 1, blit = False) 
    plt.show() 

plot_circle() 

라인은 전체 무릎보다 긴, 그래서 라인이 겹치는 경우 여전히 내가 그려되고 있는지 보여주는 표시를하고 싶은 그림을 볼 수 있도록. 나는

scat = plt.scatter(0, 0) 
ani = animation.FuncAnimation(fig, update_plot, len(x), fargs=[x, y, line, scat], interval = 1, blit = False) 

처럼, 업데이트 호출에 산포도를 추가하고 성공하지 update_plotx[num]y[num]를 사용하여 스 캐터 플롯 점의 위치를 ​​업데이트하려고 노력했다. 이 효과를 얻으려면 어떻게해야합니까?

답변

0

동일한 애니메이션에 산점도를 추가하는 방법을 찾았습니다. 열쇠는 scat.set_offsets을 사용하여 데이터를 설정하는 것이 었습니다. 필요한 변경 사항은 다음과 같습니다.

def update_plot(num, x, y, line, scat): 
    # ... 
    scat.set_offsets([x[num - 1], y[num - 1]]) 
    return line, scat 

def plot_circle(): 
    # ... 
    scat = ax.scatter([0], [0], color = 'k') # Set the dot at some arbitrary position initially 
    ani = animation.FuncAnimation(fig, update_plot, len(x), fargs=[x, y, line, scat], interval = 1, blit = False) 
    plt.show() 
1

scatupdate_plot()에 반환해야합니다. 예

line.set_data(x[:num][::-1], y[:num][::-1]) 

:

import numpy as np 
import pylab as pl 

t = np.linspace(0, 2, 100) 
x = np.cos(t) 
y = np.sin(t) 

pl.plot(x[::-1], y[::-1], "-o", markevery=10000) 

출력 :

line, = ax.plot(x, y, "-o", color="k", markevery=100000) 
는 점 역순

: 여기

다른 방법 markevery 인수 선을 그리는 것이다

enter image description here

+0

정말 재미있는 솔루션! – pingul

관련 문제