设置/获取Matplotlib Axes3D的三维查看方向

设置/获取Matplotlib Axes3D的三维查看方向,3d,matplotlib,3d,Matplotlib,我只是在学习Matplotlib,所以我要直接学习立体可视化。我已经制作了可以观看屏幕的镜子,并以交互方式更新了左、右图形,它们之间的距离正好相等 我现在需要做的是询问一个轴的方向,设置另一个轴的方向。我已经完成了RFTM,并提供了帮助(Axes3D.function),不幸的是,文档似乎有点单薄,而且不一致 到目前为止,我找到的唯一设置/获取查看方向的Axes3D调用是view_init(azim=,elev=)和get_proj(),后者返回4x4转换矩阵 现在,从pdf中获取与文档字符串相

我只是在学习Matplotlib,所以我要直接学习立体可视化。我已经制作了可以观看屏幕的镜子,并以交互方式更新了左、右图形,它们之间的距离正好相等

我现在需要做的是询问一个轴的方向,设置另一个轴的方向。我已经完成了RFTM,并提供了帮助(Axes3D.function),不幸的是,文档似乎有点单薄,而且不一致

到目前为止,我找到的唯一设置/获取查看方向的Axes3D调用是view_init(azim=,elev=)和get_proj(),后者返回4x4转换矩阵

现在,从pdf中获取与文档字符串相同的文本

get_proj()
Create the projection matrix from the current viewing position.
elev stores the elevation angle in the z plane 
azim stores the azimuth angle in the x,y plane
dist is the distance of the eye viewing point from the object point.
。。。这不是在描述4x4矩阵

我可以尝试对矩阵中的值进行反向工程,以获得azim和elev,但反向工程总是感觉不对,尤其是对于广泛使用的库。我也没有找到任何函数来设置dist。我已经根据其中一个示例编写了一个简短的脚本来设置和询问查看位置

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt

plt.ion()
fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
fig.canvas.draw()

with open('dump_proj.txt','wt') as fout:
    for e in range(0, 61, 30):
        for a in range(0, 61, 30):
            fout.write('setting azimuth to {0}, elevation to {1}\n'.format(a, e))           
            ax.view_init(azim=a, elev=e)
            fig.canvas.draw()
            d=ax.get_proj()
            for row in d:
                fout.write('{0:8.4f}  {1:8.4f}  {2:8.4f}  {3:8.4f}  \n'.format(*row))
            fout.write('\n')
此处显示了已保存文件的示例部分

将方位角设置为60,将仰角设置为30

-0.1060.0604 0.0000-0.0519
-0.0306-0.0523 0.2165 0.0450
0.0000 0.0000 0.0000-10.0000
-0.0530-0.0906-0.1250 10.0779

我猜10是一个类似于观看距离的东西。我很希望有0.5或0.866个条目,使用30度和60度的角度,但看起来不是那么简单

我是否缺少一些功能,比如设置距离,或者获取仰角和方位角?或者我缺少的一些文档,告诉我4x4项目矩阵是如何构造的

我有一个解决方法,它最终可能会给我更好的计时,那就是使用另一个控件来设置方位角和仰角,然后使用它来查看左右眼轴。但是我更喜欢在第一个例子中,从一个轴获得方向

另一个问题是,这个问题如何解决

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

工作?我只是在慢慢地掌握OO方法,这似乎很神奇。Axes3D的导入是否会在幕后改变pyplot的导入?如果是重写方法的话,我肯定会在2D之后再导入3D。我想如果一切正常,那一定没问题,但我不知道怎么做。

Doh,我没有做的是查看Axes3D类实例的dir()。它们是,.azim、.elev和.dist属性。

如果您想进行立体可视化,最好使用
mayavi
。查看其
mlab
界面以获取简单的绘图命令。我使用了
mayavi
和“快门玻璃”以及偏振立体3D系统。我不认为他们会像您正在使用的那样,为基本的“并排”立体声系统添加支持,但它应该比matplotlib更容易实现。