首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从mplot3d图中获取数据

从mplot3d图中获取数据
EN

Stack Overflow用户
提问于 2018-06-11 11:30:32
回答 2查看 800关注 0票数 1

我无法找到如何从mplot3d图中获取数据。类似于2D风格的东西:

代码语言:javascript
复制
line.get_xdata()

有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-11 11:57:57

Line3D

您可以从(私有) _verts3d属性获取原始数据

代码语言:javascript
复制
xdata, ydata, zdata = line._verts3d
print(xdata)

完整示例

代码语言:javascript
复制
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()确实会返回正确的值,在绘制之后,它将返回类似的内容

代码语言:javascript
复制
[ -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

代码语言:javascript
复制
surf = ax.plot_surface(X, Y, Z)
xdata, ydata, zdata, _ = surf._vec
print(xdata)
票数 4
EN

Stack Overflow用户

发布于 2019-05-20 10:45:42

这个问题是提交给Github的,并且添加了新的get_data_3dset_data_3d方法。不幸的是,这些更改可能还不能在发行版中使用。因此,您可能必须继续使用私有变量line._verts3d

请参阅这里的更多内容:https://github.com/matplotlib/matplotlib/issues/8914

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50796705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档