如何在 matplotlib 中绘制 f(x, y, z) 的函数即 4D 数据

问题描述

我正在尝试将高斯光束的强度绘制为 x、y 和 z 的函数,但是到目前为止,我在本网站上的其他答案中没有运气,只能将单个 z 切片绘制为轮廓地块。我知道情节应该是什么样子(即中心最强烈的颜色,随着 z、r 的增加而衰减)但无法取得进展。我附上了强度生成函数和当前绘图的图像。

def w0calc(s,f,w0dash,wavelength):
    zr = (np.pi*(w0dash**2))/wavelength
    w0 = w0dash/np.sqrt(((1 - (s/f))**2) + ((zr/f)**2))
    return w0

wavelength = 0.0004*1000 # 400nm in mm
w0val = w0calc(1.8*1000,1.8*1000,3*1000,wavelength)
w0val

def onephotonintensity3d(z,x,y,w0,wavelength):
    Izr = np.zeros([len(z),len(x),len(y)])
    for i in np.arange(len(z)):
        r = np.sqrt(np.square(x) + np.square(y))
        wz = w0*np.sqrt(1 + np.square((wavelength*z[i])/(np.pi*np.square(w0))))
        wzsqr = np.square(wz)
        Izr[i,:,:] = np.multiply(np.divide(np.square(w0),wzsqr),np.exp(np.divide(-2*np.square(r),wzsqr)))
    return Izr

x = np.linspace(-w0val*6,w0val*6,100)
y = np.linspace(-w0val*6,100)
z = np.linspace(-w0val*6,100)
[X,Y] = np.meshgrid(x,y)
Intvals = onephotonintensity3d(z,X,Y,w0val,wavelength)

fig = plt.figure() % at present best solution,non-ideal
ax = plt.axes(projection='3d')
ax.contour3D(X,Intvals[50,:],50,cmap='viridis')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('Intensity')

Current "best" plot

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...