У меня есть 3D-график, построенный с использованием matplotlib.Угол управления проекцией изображения в 3D графиках matplotlib
Я хотел бы иметь 3D-график, спроецированный под определенным углом, но используя axis.view_init (elevation_angle, azimuthal_angle) не покрывает угол, который я хочу, это связано с 3 возможными плоскостями вращения в 3 размеры и только 2 угла, которые вы можете указать в matplotlib.
Вот минимальный рабочий пример.
import numpy,matplotlib,scipy
from matplotlib import pyplot
from scipy import constants
from mpl_toolkits.mplot3d.axes3d import Axes3D
pi=scipy.constants.pi
w= numpy.arange(0,5000,1)
def lorentzian(x,center,width,time,tau):
return 1.0/((1+((x-center)/width)**2)*width*pi)*numpy.exp(-time/tau)
centers= [1000.0,2000.0,4000.0]
widths = [100.0,300.0,50.0]
taus=numpy.zeros(len(widths))
for i in xrange(0,len(widths),1):
taus[i] = 1.0/widths[i]
time = numpy.array([0,0.019,0.033])
B = numpy.zeros((3,len(w)))
for z in xrange(0,len(time),1):
a= numpy.zeros(len(w))
for i in xrange(0,len(centers),1):
a = a + lorentzian(w,centers[i],widths[i],time[z],taus[i])
B[z] = a
ThreeD_spectrum_figure = matplotlib.pyplot.figure()
ThreeD_spectrum_axis = ThreeD_spectrum_figure.add_subplot(111, projection="3d")
colour = ["purple","green","orange"]
for i in xrange(0,len(time),1):
ThreeD_spectrum_axis.plot(w, B[i],time[i],color=colour[i],linewidth=3)
ThreeD_spectrum_axis.view_init(135,-90)
matplotlib.pyplot.show()
Это будет генерировать график, показанный на рисунке ниже, где я, поспешно мс краской, добавляют линии, чтобы показать вращение и ось.
Красный показывает угол управления азимутом, вращающимся вокруг оси Y.
Синий показывает угол места, вращающийся вокруг оси X.
Черный показывает вращательное движение, которое должно вращаться вокруг оси Z, что невозможно с помощью axis.view_init (elevation_angle, azimuth_angle).
Может ли кто-нибудь предложить какую-либо помощь или понять, как я могу добиться этого вращения? Спасибо