создать стереоскопический 3D-график с помощью matplotlib

Я хотел бы иметь возможность создавать 3D-графики в matplotlib, которые можно отображать в стереоскопическом 3D, например:

введите здесь описание изображения

Камера левого изображения немного смещена относительно правого. Если вы немного потренируетесь, вы сможете заставить свой мозг смотреть левым глазом на левое изображение, а правым глазом на правое изображение и видеть 3D на любом экране!

В любом случае, я хотел бы, чтобы любой 3D-график matplotlib отображался дважды, с одной камерой, слегка переведенной. Мне удалось получить только сам сюжет в стерео, просто переведя данные:

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. Я могу только найти, как установить высоту и азимут камеры, используя метод view_init объекта Axes. Кажется, не существует «хорошего» способа перевода камеры.

кто нибудь знает как это сделать?


person jkokorian    schedule 28.08.2015    source источник
comment
что плохого в том, чтобы просто установить, например, ax.view_init(azim = 10) и ax.view_init(azim = 20) для двух ваших сюжетов? Я не понимаю, почему это нехорошо. Кстати, вы также можете установить азимут с помощью ax.azim = 10 и т. д., что делает то же самое, но немного короче для записи...   -  person tmdavison    schedule 28.08.2015
comment
Ммм, на самом деле ты прав! Я как-то вбил себе в голову, что перевод нужен, чтобы как следует обмануть мозги, но на самом деле ничего принципиально другого при его вращении нет.   -  person jkokorian    schedule 28.08.2015
comment
Единственное, что сейчас не так, это метки осей. Они всегда печатаются горизонтально...   -  person jkokorian    schedule 28.08.2015
comment
это звучит как другой вопрос - может быть, начать новый вопрос с подробным описанием проблем с вашим лейблом? Сначала вы можете начать искать здесь: > stackoverflow.com/questions/21918380/   -  person tmdavison    schedule 28.08.2015