python - Python 中的散点动画

标签 python animation matplotlib

我正在尝试在 Python 3.6(在 Spyder IDE 中)中对散点图进行动画处理,其中有几个教程/示例( abc 等),但是我的更新函数不知何故收到了一组与我认为我提供的坐标非常不同的坐标。

以下是简化的示例代码,其中 4 个点向中心延伸。我将其绘制两次,第一次作为线条,第二次作为动画。线图看起来正确,但动画在点的位置及其轨迹方面显示了非常不同的行为。我推断我错误地向更新函数提供了坐标信息,但我似乎无法确定原因/方式。

我可以提供数据来显示发生的情况与应该发生的情况,但为了简洁起见,我现在仅提供此示例代码。

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.animation as anim

npt=4
ntime=101
solx=np.zeros((npt,ntime))
soly=np.zeros((npt,ntime))
solx[0,0:]=np.linspace(0,40,ntime)
solx[1,0:]=solx[0,0:];
solx[2,0:]=100-solx[0,0:];
solx[3,0:]=solx[2,0:]
soly[0,0:]=np.linspace(0,80,ntime)
soly[1,0:]=200-soly[0,0:]
soly[2,0:]=soly[0,0:]
soly[3,0:]=soly[1,0:]


#%% Plots
colord=mpl.cm.gist_ncar(np.linspace(0,0.9,npt))
of2,oa2=plt.subplots(1)
for cnt in range(0,npt): oa2.plot(solx[cnt,0:],soly[cnt,0:],c=colord[cnt])

of3,oa3=plt.subplots()
osc3=oa3.scatter(solx[0:,0],soly[0:,0],c=colord,marker='+')
def aninit():
    osc3.set_offsets(np.stack((solx[0:,0],soly[0:,0]),axis=0))
    return osc3,
def aniupdate(i):
    osc3.set_offsets(np.stack((solx[0:,i],soly[0:,i]),axis=0))
    return osc3,

ani=anim.FuncAnimation(of3,aniupdate,init_func=aninit,frames=range(0,ntime),interval=100,blit=True,repeat=True,repeat_delay=1000)
plt.show()

最佳答案

如果更换

np.stack((solx[0:,0],soly[0:,0]),axis=0)
np.stack((solx[0:,i],soly[0:,i]),axis=0)

与:

list(zip(solx[0:,0],soly[0:,0]))
list(zip(solx[0:,i],soly[0:,i]))

或者(如果你想使用 numpy 数组而不是列表:

np.array([solx[0:,0],soly[0:,0]]).T
np.array([solx[0:,i],soly[0:,i]]).T

aninit()aniupdate(i) 函数中,行为应该符合预期。

这是我用来制作绘图的代码:

def aninit():
    offsetlist = np.array([solx[0:,0],soly[0:,0]]).T
    osc3.set_offsets(offsetlist)
    return osc3,

def aniupdate(i):
    offsetlist = np.array([solx[0:,i],soly[0:,i]]).T
    osc3.set_offsets(offsetlist)
    return osc3,

关于python - Python 中的散点动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47187153/

相关文章:

python - 在对数对数刻度上使用 matplotlib 拟合曲线

java - 有效计算给定总和的所有对

python - Django 文件字段 : how to set default value (auto-create empty file)?

python - 使用for循环时如何获取前一个元素?

android - 如何动画高度变化

python - 如何为不规则采样的时间序列获得漂亮的刻度标签?

python - 制作自定义 Keras 层时无法使用未知的输入 Dims(批量大小)

c# - 笔刷动画

android - 在 View 上显示图像

python - 从具有 3 个 channel 的 numpy 数组绘制彩色图像