从 mplot3d 图形中获取数据
Get data from mplot3d graph
我不知道如何从 mplot3d 图形中获取数据。类似于 2D 样式的内容:
line.get_xdata()
可以吗?
三维直线
您可以从(私有)_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
的问题在于,一旦绘制图形,它将 return 投影坐标。因此,虽然在绘制图形之前,line.get_xdata()
确实 return 是正确的值,但在绘制之后,它会 return 类似于
[ -6.14413090e-02 -3.08824862e-02 -3.33066907e-17 3.12113190e-02 6.27567511e-02]
在上面的例子中,它是投影到2D上的3D坐标的x分量。
有一个 pull request to 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
我不知道如何从 mplot3d 图形中获取数据。类似于 2D 样式的内容:
line.get_xdata()
可以吗?
三维直线
您可以从(私有)_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
的问题在于,一旦绘制图形,它将 return 投影坐标。因此,虽然在绘制图形之前,line.get_xdata()
确实 return 是正确的值,但在绘制之后,它会 return 类似于
[ -6.14413090e-02 -3.08824862e-02 -3.33066907e-17 3.12113190e-02 6.27567511e-02]
在上面的例子中,它是投影到2D上的3D坐标的x分量。
有一个 pull request to 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