python - matplotlib 3D 散点动画
问题描述
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(100)
y = np.arange(100)
for t in range(100):
z = np.ones(100)*t
fig = plt.figure(dpi=1200)
ax = fig.add_subplot(projection='3d')
ax.scatter(x,y,z)
我想根据t
. 例如(x[0], y[0], z)
,当 t = 0 时首先绘图。然后 (x[1], y[1],z)
当 t = 1 时,等等。但是,一旦新点显示,以前的点就会消失。请问我怎样才能做到这一点?谢谢你。另外,如果我 ax.scatter
改为ax.plot_surface
,请问我将如何实现相同的目标?谢谢。
解决方案
我重新构建了您的代码以播放动画。
首先,您需要定义一个函数update
,您想要从一帧更改为下一帧的内容将被更新。在我们的例子中,在update
函数 I updatex
和基于参数y
的坐标。然后我清除以前的图并用更新的坐标绘制一个新的图。最后,设置轴限制很方便,以保持动画帧固定。z
t
def update(t):
ax.cla()
x = np.cos(t/10)
y = np.sin(t/10)
z = 5
ax.scatter(x, y, z, s = 100, marker = 'o')
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(-1, 10)
然后创建一个图形和一个FuncAnimation
实例,向其传递播放动画的图形、update
函数和其他重要参数,如帧数、它们之间的间隔等。有关详细信息,请参阅文档。
fig = plt.figure(dpi=100)
ax = fig.add_subplot(projection='3d')
ani = FuncAnimation(fig = fig, func = update, frames = 100, interval = 100)
plt.show()
完整代码
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation
def update(t):
ax.cla()
x = np.cos(t/10)
y = np.sin(t/10)
z = 5
ax.scatter(x, y, z, s = 100, marker = 'o')
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(-1, 10)
fig = plt.figure(dpi=100)
ax = fig.add_subplot(projection='3d')
ani = FuncAnimation(fig = fig, func = update, frames = 100, interval = 100)
plt.show()
如果您还想跟踪粒子轨迹,可以添加X
,Y
并Z
列出保存粒子坐标的位置:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.animation import FuncAnimation
X = []
Y = []
Z = []
def update(t):
ax.cla()
x = np.cos(t/10)
y = np.sin(t/10)
z = t/10
X.append(x)
Y.append(y)
Z.append(z)
ax.scatter(x, y, z, s = 100, marker = 'o')
ax.plot(X, Y, Z)
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_zlim(-1, 10)
fig = plt.figure(dpi=100)
ax = fig.add_subplot(projection='3d')
ani = FuncAnimation(fig = fig, func = update, frames = 100, interval = 100, repeat = False)
plt.show()
推荐阅读
- python - Pandas 将一个组的值投射给组中的每个成员
- azure - Azure Blob 存储中是否有类似传输加速的功能?
- angular - 处理 AngularFireModule.initializeApp 中的错误
- google-sheets - Google 表格:如何计算累积的分层定价
- html - 如何确保内部 div 仅使用 CSS/HTML 不会超出其容器 div flexbox?
- typescript - 通用返回 T 的打字稿
- python - 如何使用 Tesseract OCR 从视频帧中提取数字?
- postgresql-9.5 - 错误:“SELECT”第 14 行或附近的语法错误:v_result := SELECT * FROM iis_e_ack_pkg.is_e_ack_confirm
- typescript - 在 create-react-app 中添加自定义反应脚本的标准方法
- python - 使用 Python 和 REST api 从 Sharepoint 中提取