我无法找到如何从mplot3d图中获取数据。类似于2D风格的东西:
line.get_xdata()有可能吗?
发布于 2018-06-11 11:57:57
Line3D
您可以从(私有) _verts3d属性获取原始数据
xdata, ydata, zdata = line._verts3d
print(xdata)完整示例
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
mpl.rcParams['legend.fontsize'] = 10
fig = plt.figure()
ax = fig.gca(projection='3d')
# Prepare arrays x, y, z
x = np.arange(5)
y = np.arange(5)*4
z = np.arange(5)*100
line, = ax.plot(x, y, z, label='curve')
fig.canvas.draw()
xdata, ydata, zdata = line._verts3d
print(xdata) # This prints [0 1 2 3 4]
plt.show()一些解释:get_data或get_xdata的问题是,一旦绘制出图形,它就会返回投影坐标。因此,在绘制图形之前,line.get_xdata()确实会返回正确的值,在绘制之后,它将返回类似的内容
[ -6.14413090e-02 -3.08824862e-02 -3.33066907e-17 3.12113190e-02 6.27567511e-02]在上面的例子中,它是投影到2D上的3D坐标的x分量。
有一个将请求拉到matplotlib,它允许通过get_data_3d方法获取数据。这仍未合并,但可能允许在将来的matplotlib版本中不使用私有参数来完成上述操作。
Poly3DCollection
对于plot_surface绘图,这看起来类似,但要查看的属性是._vec
surf = ax.plot_surface(X, Y, Z)
xdata, ydata, zdata, _ = surf._vec
print(xdata)发布于 2019-05-20 10:45:42
这个问题是提交给Github的,并且添加了新的get_data_3d和set_data_3d方法。不幸的是,这些更改可能还不能在发行版中使用。因此,您可能必须继续使用私有变量line._verts3d。
请参阅这里的更多内容:https://github.com/matplotlib/matplotlib/issues/8914
https://stackoverflow.com/questions/50796705
复制相似问题