python - 修改matplotlib patchcollecton3d数据

标签 python matplotlib

如何修改 matplotlib 中 3D 散点图的 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_instance?

最佳答案

坐标存储在属性_offsets3d中。虽然有 get_offsets() 方法和 set_offsets() 方法,但这些方法似乎是从 2d 版本继承的,并且不能正常用于 3d。 _offsets3d 包含 x、y 和 z 坐标元组的元组。假设您想要将每个点在 x 方向上移动 10。您可以将 10 添加到 x 坐标元组中的每个数字,然后将 _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()

3d Scatter Plot

关于python - 修改matplotlib patchcollecton3d数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034200/

相关文章:

python - 在共享虚拟主机上将 Flask 部署为 CGI

python - 在 python 脚本中使用代理后面的 git

python - 在 Linux 中使用 ACS ACR1252U USB NFC 读卡器

python - Matplotlib 在 Spyder ipython 中卡住

python - matplotlib:如何降低子图中刻度标签的密度?

python - 包含列表和其他数据类型的字符串到字典而不更改python中的数据类型

python - 更改 Matplotlib 后端会使 Debug模式崩溃

python - 从 odeint scipy python 使用的函数中提取值

python - 如果实体重复,如何绘制断条

python - Django:没有 CSS 和正确文本的 html