我有一个3D坐标的数据集在时间上移动。所以我的ndarray数据看起来像这样:
points = [ # 1st dim: Time-step (/timeframe)
[ # 2nd dim: Different Objects
[ # 3rd dim: The coordinates of the Objects
2.115, 2.387, 3.3680003],
[2.059, 2.302, 3.2610002],
[2.1720002 2.2280002 3.1880002]],
[[1.9530001, 2.306, 3.5760002],
[1.9510001, 2.265, 3.433 ],
[2.1000001, 2.2440002, 3.381]],
[[1.6760001, 2.459, 3.4650002],
[1.5710001, 2.434, 3.367 ],
[1.6320001 2.4320002 3.2250001]]]
我正在绘制一个接一个的对象:
import matplotlib.pyplot as plt
for timeframe in range(points.shape[0]):
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x_coordinates = points[timeframe][:, 0]
y_coordinates = points[timeframe][:, 1]
z_coordinates = points[timeframe][:, 2]
ax.scatter(x_coordinates, y_coordinates, z_coordinates, c='r', marker='o')
plt.show()
现在我想制作一个图或窗口,在这里我可以使用滑块根据时间步长在绘制的图形之间进行选择。
1条答案
按热度按时间v440hwme1#
是的,你可以使用matplotlib widgets库,但是你需要让你的matplotlib具有交互性。
您可以添加一个水平滑块(参见示例:https://matplotlib.org/stable/gallery/widgets/slider_demo.html),当您选择并移动滑块时,您将调用一个函数。在我提供的示例中,该函数称为
update
。当您通过移动滑块来更新滑块值时,它将调用此函数并将实际滑块值提供给它。所以你可以用你的
for loop
的整数值创建一个滑块,当你更新滑块时,你调用update
函数,在里面你有代码来使用来自滑块的整数值绘制数据。滑块:
当你看到我分享的例子时,我保留了几乎所有的名字来帮助你。请注意,当你滑动滑块时,我添加了
valstep=1.0
以增加1。更新功能:
它可能会出现一些问题,因为你可能没有你的matplotlib交互。如果你使用jupyter-notebook很容易把它交互,你只需要添加这行在顶部:
如果不起作用,您可以尝试:
您可能还需要安装一些apache模块。
如果你想让它恢复正常,你只需要在顶部再次添加:
关于matplotlib中交互式绘图的更多信息:https://matplotlib.org/stable/users/explain/interactive.html