从 mplot3d 图形中获取数据



我找不到如何从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_dataget_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_3dset_data_3d方法。不幸的是,这些更改可能尚未在发行版中提供。因此,您可能必须继续使用私有变量line._verts3d

在此处查看更多内容: https://github.com/matplotlib/matplotlib/issues/8914

相关内容

  • 没有找到相关文章