我在2D中有散射动画的工作代码:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def _update_plot(i, fig, scat):
scat.set_offsets(([0, i], [50, i], [100, i]))
return scat,
fig = plt.figure()
x = [0, 50, 100]
y = [0, 0, 0]
ax = fig.add_subplot(111)
ax.set_xlim([-50, 200])
ax.set_ylim([-50, 200])
scat = plt.scatter(x, y, c=x)
scat.set_alpha(0.8)
anim = animation.FuncAnimation(fig, _update_plot, fargs=(fig, scat), frames=100, interval=100)
plt.show()
我尝试将其转换为3D,但它无法正常工作..
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
def _update_plot(i, fig, scat):
scat._offsets3d([0, 0, 0], [50, 0, 0], [100, 0, 0])
return scat
fig = plt.figure()
x = [0, 50, 100]
y = [0, 0, 0]
z = [0, 0, 0]
ax = fig.add_subplot(111, projection='3d')
scat = ax.scatter(x, y, z)
anim = animation.FuncAnimation(fig, _update_plot, fargs=(fig, scat), frames=100, interval=100)
plt.show()
有人可以就如何解决此问题向我提出建议吗? 谢谢
答案 0 :(得分:1)
_offsets3d
是属性,而不是方法。而不是
scat._offsets3d([0, 0, 0], [50, 0, 0], [100, 0, 0])
您需要为其分配(x,y,z)
值的元组:
scat._offsets3d = ([0, 0, 0], [50, 0, 0], [100, 0, 0])
这当然总是为所有100帧产生相同的图。所以为了看动画像
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
def _update_plot(i, fig, scat):
scat._offsets3d = ([0, i, i], [50, i, 0], [100, 0, i])
return scat
fig = plt.figure()
x = [0, 50, 100]
y = [0, 0, 0]
z = [0, 0, 0]
ax = fig.add_subplot(111, projection='3d')
scat = ax.scatter(x, y, z)
ax.set_xlim(0,100)
ax.set_ylim(0,100)
ax.set_zlim(0,100)
anim = animation.FuncAnimation(fig, _update_plot, fargs=(fig, scat), frames=100, interval=100)
plt.show()