Python 修改matplotlib PatchCollection3D数据

Python 修改matplotlib PatchCollection3D数据,python,matplotlib,Python,Matplotlib,如何在matplotlib中修改三维散点图的xyz数据以实现快速在线动画?换句话说,matplotlib patchcollection3d对象在哪里保存xyz坐标,以及如何设置它们?例如: import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import axes3d import numpy as np ## generate some random data pts = np.random.uniform(0,10,(10,

如何在matplotlib中修改三维散点图的xyz数据以实现快速在线动画?换句话说,matplotlib patchcollection3d对象在哪里保存xyz坐标,以及如何设置它们?例如:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import numpy as np

## generate some random data
pts = np.random.uniform(0,10,(10,20,30))

plt.close('all')
fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
patch_collection_instance = ax.scatter(pts[:,0],pts[:,1],pts[:,2], c='m', marker='o')

例如,如果我想按随机量平移所有点,那么接下来如何处理patch_collection_实例?

坐标存储在属性
\u offsets3d
中。虽然有一个
get_offsets()
方法和一个
set_offsets()
方法,但这些方法似乎是从2d版本继承而来的,不能正确地用于3d<代码>\u offsets3d包含x、y和z坐标元组的元组。假设您希望在x方向上将每个点移动10。在x坐标元组中,每个数字加10,然后将_offsets3d设置为新元组

我不确定这是否比仅仅清除图形并使用新坐标再次调用
scatter
更快,这应该具有相同的效果

示例代码:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import numpy as np
from copy import copy

## generate some random data
pts = np.random.uniform(0,10,(10,20,30))

fig = plt.figure()
ax = fig.add_subplot(111,projection='3d')
patch_collection_instance = ax.scatter(pts[:,0],pts[:,1], pts[:,2], c='m', marker='o')
x, y, z = patch_collection_instance._offsets3d
print x
x = [i + 10 for i in x]
offsets = (x, y, z)
patches2 = copy(patch_collection_instance)
patches2._offsets3d = offsets
patches2._facecolor3d = [[0, 0, 1, 1]]
ax.add_collection3d(patches2)
plt.xlim(0, 20)
plt.show()

我将此标记为正确答案,但我没有检查自己。我很快就完成了那个项目,现在可以到处玩了。谢谢