2017-04-12 18 views
0

애니메이션 순차은 :하기 matplotlib 3D 분산 좀 가속도계 데이터의 다음과 같은 3D 산포도를 생성 한 데이터

3D Scatter plot

그것은 아주 기본적인,하지만 나는 그것을 고려 보이는 방식에 만족 해요이 내 먼저 파이썬 사용을 시도하십시오. 여기에이 시각화하기 위해 쓴 코드 : 데이터는 타임 스탬프에 의해 인덱싱

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib 
matplotlib.style.use('ggplot') 
from mpl_toolkits.mplot3d import Axes3D 
from mpldatacursor import datacursor 

AccX = pd.read_csv('Data_Retrieval_April_05_2017.csv') 
AccX.columns = ['Tag', 'Timestamp', 'X'] 
AccX = AccX[AccX['Tag'].str.contains("ACC856:AccelerationX")] 
del AccX['Tag'] 

print(AccX.head()) 

AccY = pd.read_csv('Data_Retrieval_April_05_2017.csv') 
AccY.columns = ['Tag', 'Timestamp', 'Y'] 
AccY = AccY[AccY['Tag'].str.contains("ACC856:AccelerationY")] 
del AccY['Tag'] 

print(AccY.head()) 

AccZ = pd.read_csv('Data_Retrieval_April_05_2017.csv') 
AccZ.columns = ['Tag', 'Timestamp', 'Z'] 
AccZ = AccZ[AccZ['Tag'].str.contains("ACC856:AccelerationZ")] 
del AccZ['Tag'] 

print(AccZ.head()) 

Accel = AccX.merge(AccY,on='Timestamp').merge(AccZ,on='Timestamp') 

Accel = Accel.set_index(['Timestamp']) 

print(Accel.head()) 

Accel['X'] = Accel.X.astype(float) 
Accel['Y'] = Accel.Y.astype(float) 
Accel['Z'] = Accel.Z.astype(float) 

print(Accel.head()) 
print(Accel.dtypes) 

accelscat = plt.figure().gca(projection='3d') 
accelscat.scatter(Accel['X'],Accel['Y'],Accel['Z'], c='darkblue', alpha=0.5) 

accelscat.set_xlabel('X') 
accelscat.set_ylabel('Y') 
accelscat.set_zlabel('Z') 

plt.show() 

, 그리고 다음과 같습니다 : 나는 다음에 무엇을하고 싶은 무엇

enter image description here

가있다 위의 줄거리를 가져 와서 한 번에 한 점씩 올리십시오. 이 작업을 수행하는 간단한 방법이 있습니까? matplotlib의 예제를 보면 무작위로 생성 된 데이터를 사용하고있는 것처럼 보입니다. 내 데이터의 각 행에 대해 그림을 업데이트하는 함수를 작성하는 방법을 잘 모르겠습니다.

누군가 비슷한 일이 이루어지는 곳으로 나를 안내 할 수 있다면 정말 고맙겠습니다. 지금까지 저의 검색은 데이터가 함수에 의해 생성되었거나 무작위로 생성 된 예제만을 가지고 있습니다. 이 질문에 3D 산포도에 대한 예제가있다

답변

2

: 포인트는 현재 애니메이션 인덱스 i까지 인덱스 0에서 시작 dataframe에서 데이터를 그릴 것 하나 하나 드러하기 위해 Matplotlib 3D scatter animations

.

(df.x.values[:i], df.y.values[:i], df.z.values[:i]) 

전체 예 :

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.animation 

x = np.random.normal(size=(80,3)) 
df = pd.DataFrame(x, columns=["x","y","z"]) 


fig = plt.figure() 
ax = fig.add_subplot(111,projection='3d') 
sc = ax.scatter([],[],[], c='darkblue', alpha=0.5) 

def update(i): 
    sc._offsets3d = (df.x.values[:i], df.y.values[:i], df.z.values[:i]) 

ax.set_xlabel('X') 
ax.set_ylabel('Y') 
ax.set_zlabel('Z') 
ax.set_xlim(-3,3) 
ax.set_ylim(-3,3) 
ax.set_zlim(-3,3) 

ani = matplotlib.animation.FuncAnimation(fig, update, frames=len(df), interval=70) 

plt.tight_layout() 
plt.show() 

enter image description here