Python 如何从csv文件中的数据更新三维箭袋动画?

Python 如何从csv文件中的数据更新三维箭袋动画?,python,pandas,matplotlib-animation,Python,Pandas,Matplotlib Animation,我需要关于如何从csv更新3D箭袋头部值的帮助 目前,我有一个csv文件,其中包含3列x、y、z轴,我想在python代码中将其更新为u、v、w变量 我面临的问题是,结果动画无法正确设置动画。这是一张静态图片,如下所示 我确信我一定是把如何迭代/读取csv数据文件搞砸了 import numpy as np import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D fr

我需要关于如何从csv更新3D箭袋头部值的帮助 目前,我有一个csv文件,其中包含3列x、y、z轴,我想在python代码中将其更新为u、v、w变量

我面临的问题是,结果动画无法正确设置动画。这是一张静态图片,如下所示

我确信我一定是把如何迭代/读取csv数据文件搞砸了

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

fig, ax = plt.subplots(subplot_kw=dict(projection="3d"))

# Reading the data from a CSV file using pandas
repo = pd.read_csv('test.csv',sep=',',header=0)
data = np.array((repo['x'].values, repo['y'].values, repo['z'].values))

def get_arrow():
    x = 0
    y = 0
    z = 0
    u = data[0][:]
    v = data[1][:]
    w = data[2][:]
    return x,y,z,u,v,w

quiver = ax.quiver(0,0,0,0,0,0)

ax.set_xlim(-.5, .5)
ax.set_ylim(-.5, .5)
ax.set_zlim(-.5, .5)

def update(theta):
    global quiver
    quiver.remove()
    quiver = ax.quiver(*get_arrow())


ani = FuncAnimation(fig, update, frames=np.linspace(0,2*np.pi,200), interval=50)
plt.show()

我不确定箭头的行为,因为数据未知,但我尝试使用示例数据创建它们。我还提供了一个用于GIF图像和jupytert的库,因此您可以修改它以适应您的环境

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimation
import random
from IPython.display import HTML
from matplotlib.animation import PillowWriter

random.seed(20210110)

repo = (pd.DataFrame({'x':np.random.randint(0,5, size=50),
                     'y':np.random.randint(0,5, size=50),
                     'z':np.random.randint(0,5, size=50)}))
data = np.array((repo['x'].values, repo['y'].values, repo['z'].values))

fig, ax = plt.subplots(subplot_kw=dict(projection="3d"))

quiver = ax.quiver([],[],[],[],[],[])

ax.set_xlim(-5, 5)
ax.set_ylim(-5, 5)
ax.set_zlim(-5, 5)

def update(i):
    global quiver
    quiver.remove()
    quiver = ax.quiver(0,0,0,data[0][i],data[1][i],data[2][i])

ani = FuncAnimation(fig, update, frames=50, interval=50)
# plt.show()
ani.save('./quiver_test_ani.gif', writer='pillow')
plt.close()
# jupyter lab
# HTML(ani.to_html5_video())

动画是否按预期工作?修复方法是,功能化的
get_箭头
现在包含在动画功能中。我更改了
frames=50
,以匹配默认设置和数据数量。请接受这个答案。是的,动画正在按预期工作。很抱歉没有早点接受答案。我还是个新手。