2016-09-14 3 views
0

CSV 파일의 실제 타임 스탬프를 기반으로 산점도를 애니메이션화하려고합니다 (아래 참조). matplotlib에별로 좋지 않아서 애니메이션 함수와 ion() 함수를 알고 있지만 구현 방법을 잘 모르겠습니다. 나는 this을 읽었지만 내 방식으로 구현하는 것은 매우 어려워 보였습니다. 나는 코드 아래 시도했지만 그것은 단지 실제 데이터와 모든 루프를 나에게 새로운 창을 보여줍니다하지만 :) 사전에 하나 개의 창 덕분에 애니메이션을 가지고 싶다 :matplotlib을 사용한 대화 형/애니메이션 산점도 플롯

import pandas as pd 
import matplotlib.pyplot as plt 

start_time = 86930.00 
end_time = 86934.00 
df = pd.read_csv('Data.csv', delimiter=',') 

for timestamp in range(int(start_time), int(end_time), 1): 
    act_data = df.loc[df['timestamp'] == float(timestamp)] 
    X = act_data.x 
    Y = act_data.y 
    plt.scatter(X, Y) 
    plt.show() 

Data.csv :

timestamp,id,x,y 
86930.00,1,1155.53,7155.05 
86930.00,2,3495.08,8473.46 
86931.00,1,3351.04,6402.27 
86931.00,3,3510.59,8021.62 
86931.00,2,2231.04,6221.27 
86931.00,4,3710.59,8111.62 
86932.00,2,3333.01,6221.27 
86932.00,1,3532.59,3178.62 
86933.00,3,1443.01,2323.27 
86933.00,4,5332.59,1178.62 

블롭을 ID로 채울 수 있지만 필요하지는 않지만 멋지다. :)

+0

여기 IPython/Jupyter 노트북을 옵션으로 사용할 수 있습니까? 저것을하기 아주 쉽. –

+0

아니요 옵션이 아닙니다. 그러나 재미있는 소리. 어떻게 그걸 할거야? 어쩌면 나는 이식 할 수있다. – Blind0ne

+0

Notebook에서 [widgets] (https://jakevdp.github.io/blog/2013/05/19/a-javascript-viewer-for-matplotlib-animations/)는 쉽게 그런 일을 할 수 있습니다. –

답변

1

같은 축에 애니메이션하는 가장 빠른 방법은 당신이 당신은 또한 matplotlibslider widget를 사용할 수있는 대화 형 무언가를 원하는 제목에서 의심, 대화 형 플롯을 사용하지만 plt.ion

import pandas as pd 
import matplotlib.pyplot as plt 

start_time = 86930.00 
end_time = 86934.00 
df = pd.read_csv('Data.csv', delimiter=',') 


fig, ax = plt.subplots(1,1) 
plt.ion() 
plt.show() 

for timestamp in range(int(start_time), int(end_time), 1): 
    act_data = df.loc[df['timestamp'] == float(timestamp)] 
    X = act_data.x 
    Y = act_data.y 
    ax.scatter(X, Y) 
    plt.pause(1.0) 

입니다. 데이터와 함께

import pandas as pd 
import matplotlib.pyplot as plt 
from matplotlib.widgets import Slider 

start_time = 86930.00 
end_time = 86934.00 
df = pd.read_csv('Data.csv', delimiter=',') 


fig, ax = plt.subplots(1,1) 
plt.subplots_adjust(bottom=0.25) 
sax = plt.axes([0.25, 0.1, 0.65, 0.03]) 
slide = Slider(sax, 'time', start_time, end_time, valinit=start_time) 

#Initial plot 
act_data = df.loc[df['timestamp'] == float(int(start_time))] 
s, = ax.plot(act_data.x, act_data.y, 'o') 

def update(timestamp): 
    act_data = df.loc[df['timestamp'] == float(int(timestamp))] 
    X = act_data.x 
    Y = act_data.y 

    #Update data based on slider 
    s.set_xdata(X) 
    s.set_ydata(Y) 

    #Reset axis limits 
    ax.set_xlim([X.min()*0.9,X.max()*1.1]) 
    ax.set_ylim([Y.min()*0.9,Y.max()*1.1]) 

    fig.canvas.draw() 

slide.on_changed(update) 
plt.show() 
+0

정말 대단해! – Blind0ne

관련 문제