我找不到如何从mplot3d图中获取数据。类似于 2D 样式的内容:
line.get_xdata()
可能吗?
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)
这个问题是在 Github 上提交的,并且有贡献增加了新的get_data_3d
和set_data_3d
方法。不幸的是,这些更改可能尚未在发行版中提供。因此,您可能必须继续使用私有变量line._verts3d
。
在此处查看更多内容: https://github.com/matplotlib/matplotlib/issues/8914