Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib 3D散点动画顺序数据_Python_Animation_Matplotlib_Plot_Scatter3d - Fatal编程技术网

Python Matplotlib 3D散点动画顺序数据

Python Matplotlib 3D散点动画顺序数据,python,animation,matplotlib,plot,scatter3d,Python,Animation,Matplotlib,Plot,Scatter3d,我制作了一些加速计数据的以下3D散点图: 它非常基本,但考虑到这是我第一次尝试使用Python,我对它的外观感到满意。以下是我为实现此可视化而编写的代码: import pandas as pd import matplotlib.pyplot as plt import matplotlib matplotlib.style.use('ggplot') from mpl_toolkits.mplot3d import Axes3D from mpldatacursor import data

我制作了一些加速计数据的以下3D散点图:

它非常基本,但考虑到这是我第一次尝试使用Python,我对它的外观感到满意。以下是我为实现此可视化而编写的代码:

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()
数据按时间戳索引,如下所示:

接下来我想做的是,取上面的图,让每个点一次一个。有没有一个简单的方法可以做到这一点?从中查看示例,看起来他们使用的是随机生成的数据,然后设置线条的动画。我不知道该如何编写函数来更新数据中每一行的图形


如果有人能给我举一个类似的例子,我会非常感激。到目前为止,我的搜索只得到了数据由函数生成或随机生成的示例

在这个问题中有一个3D散点图的例子:

为了让点一个接一个地出现,您需要绘制从索引
0
开始的数据帧到当前动画索引
i
的数据

(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()

在这个问题中有一个3D散点图的例子:

为了让点一个接一个地出现,您需要绘制从索引
0
开始的数据帧到当前动画索引
i
的数据

(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()