Python 使用matplotlib创建立体3d打印

Python 使用matplotlib创建立体3d打印,python,matplotlib,3d,stereoscopy,Python,Matplotlib,3d,Stereoscopy,我希望能够在matplotlib中绘制3d绘图,并以立体3d显示,如下所示: 左侧图像的相机相对于右侧略微平移。如果你练习一下,你可以欺骗你的大脑,让你的左眼看左图,右眼看右图,在任何屏幕上都可以看到3D 无论如何,我希望能够使任何matplotlib 3d绘图显示两次,其中一个摄像头稍微平移。我只需翻译数据,就可以获得立体图: from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFor

我希望能够在matplotlib中绘制3d绘图,并以立体3d显示,如下所示:

左侧图像的相机相对于右侧略微平移。如果你练习一下,你可以欺骗你的大脑,让你的左眼看左图,右眼看右图,在任何屏幕上都可以看到3D

无论如何,我希望能够使任何matplotlib 3d绘图显示两次,其中一个摄像头稍微平移。我只需翻译数据,就可以获得立体图:

from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(10,5))
axl = fig.add_subplot(1,2,1,projection='3d')
axr = fig.add_subplot(1,2,2,projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

axr.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
        linewidth=0, antialiased=False)
axl.plot_surface(X, Y-5, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
        linewidth=0, antialiased=False)
for ax in [axr,axl]:
    ax.set_zlim(-1.01, 1.01)
    ax.set_ylim(-10,10)
    ax.view_init(azim=10)
    ax.set_axis_off()

这提供了所需的效果,但我也希望能够在立体3d中显示轴本身。我只能找到如何使用Axis对象的
view\u init
方法设置相机的仰角和方位角。似乎没有一种翻译相机的“好”方法


有人知道怎么做吗?

仅仅设置ax.view\u init(azim=10)和
ax.view\u init(azim=20)
两个子批次的设置有什么用?我不明白这为什么不“好”。顺便说一句,你也可以用ax.azim=10等设置方位角,这做的是相同的,但写起来稍微短一些……嗯,实际上你是对的!不知何故,我认为翻译是正确欺骗大脑的必要手段,但实际上,在旋转它时,没有什么根本不同的地方。现在唯一的错误是轴标签。它们总是水平打印…这听起来像是一个不同的问题-也许可以开始一个新的问题与您的标签问题的细节?不过,您可以先从这里开始查看: