gpt4 book ai didi

python - 在标量场上映射 3D 等值面的色标

转载 作者:行者123 更新时间:2023-12-03 20:53:40 28 4
gpt4 key购买 nike

假设我们有一些 3D 复值函数 f(x,y,z)。使用 Plotly,我试图绘制等值面 |f(x,y,z)|这样的功能。到目前为止,一切正常,我的代码似乎运行良好,请在 atomic orbitals 下面找到一个工作示例。职能 :

import chart_studio.plotly as py
import plotly.graph_objs as go
import scipy.special as scispe
import numpy as np
import math

a=5.29e-11 # Bohr radius (m)

def orbital(n,l,m,r,theta,phi): # Complex function I want to plot
L=scispe.genlaguerre(n-l-1,2*l+1) # Laguerre polynomial
radial= (2/(n*a))**(3/2) * np.sqrt(math.factorial(n-l-1)/(2*n*math.factorial(n+l))) * np.exp(-2*r/n) * (2*r/n)**l * L(2*r/n)
wavefunction = radial * scispe.sph_harm(m,l, phi, theta)
return wavefunction

#Quantum numbers
n=2
l=1
m=0

goodspan = (3 * n**2 - l * (l+1))/2 #Plot span adpated to the mean electron position
x, y, z = np.mgrid[-goodspan:goodspan:40j, -goodspan:goodspan:40j, -goodspan:goodspan:40j] #in units of a
r = np.sqrt(x**2 + y**2 + z**2) #Function has to be evaluated in spherical coordinates
theta = np.arccos(z/r)
phi = np.arctan(y/x)

AO=orbital(n,l,m,r,theta,phi)

magnitude = abs(AO) # Compute the magnitude of the function
phase = np.angle(AO) # Compute the phase of the function

isoprob = np.amax(magnitude)/2 # Set value the isosurface

fig = go.Figure(data=go.Isosurface(
x=x.flatten(),
y=y.flatten(),
z=z.flatten(),
value=magnitude.flatten(),
opacity=0.5,
isomin=isoprob,
isomax=isoprob,
surface_count=1,
caps=dict(x_show=True, y_show=True)
))
fig.show()

这给了我这个:
enter image description here

在这一点上,图形的颜色比例取决于大小 |f(x,y,z)| 的值,因此单个等值面的颜色始终是均匀的。

现在,我希望将色阶映射到 |f(x,y,z)| 的大小上,而是将其映射到 的值上。相 Ф(x,y,z) = arg(f(x,y,z)),所以绘制的等值面的每个点的颜色告诉我们场 Ф(x,y,z) 的值(其中理想情况下将分布在 [-π,π] 上) 而不是 |f(x,y,z)|在这一点上。

基本上,我想做 this如果可能的话,用 Plotly 代替 Mayavi。

在我看来,所有这些都与设置 cmin 的特殊方式有关。和 cmax函数参数 Isosurface ,但我不知道如何做到这一点。

最佳答案

正如@gnodab 在他的评论中提到的, plotly 等值面并不真正支持通过第五维为表面着色(至少没有明显的方法来做到这一点)。我也不确定是否有可能提取描述等值面的数据以某种方式重新绘制为常规表面。

this post ,然而,他们描述了如何使用 skimage.measure.marching_cubes_lewiner 生成等值面。然后由自定义色阶绘制和着色,绘图为 'mesh3d'痕迹。这可能就是你想要的。如果我找到时间,我会尝试一下,稍后再编辑我的答案。

关于python - 在标量场上映射 3D 等值面的色标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61822942/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com