You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly绘制原子轨道:球极网格转笛卡尔网格出错求助

问题原因与解决方法

核心错误点

  1. 球坐标r的取值错误:球极坐标中径向距离r应为非负值,你当前设置np.linspace(-1,1,30)包含负数,不符合球坐标定义,会导致坐标转换混乱。
  2. np.meshgrid参数顺序误用:numpy的meshgrid处理三维输入时,返回的数组维度顺序与输入参数强相关。你传入(r, theta, phi)会导致THETA维度对应错误,出现全0情况。正确做法是先创建theta和phi的二维网格,再与r的一维数组广播,或调整参数顺序并指定indexing='ij'匹配数学坐标逻辑。

修正后的代码

import plotly.graph_objects as go
import numpy as np

# 球坐标参数:r取非负值,theta(极角)0到π,phi(方位角)0到2π
r = np.linspace(0, 4, 30)  # 扩大范围更易观察原子轨道完整形态
theta = np.linspace(0, np.pi, 30)
phi = np.linspace(0, 2 * np.pi, 30)

# 正确创建球坐标网格:先生成theta与phi的二维网格,再将r扩展为三维数组广播
THETA, PHI = np.meshgrid(theta, phi)
R = r[:, np.newaxis, np.newaxis]

# 球坐标转笛卡尔坐标
X = R * np.sin(THETA) * np.cos(PHI)
Y = R * np.sin(THETA) * np.sin(PHI)
Z = R * np.cos(THETA)

# 1pz轨道波函数(对应你原表达式的物理意义)
values = np.exp(-R/2) * R * np.cos(THETA)

fig = go.Figure(data=go.Volume(
    x=X.flatten(),
    y=Y.flatten(),
    z=Z.flatten(),
    value=values.flatten(),
    isomin=np.min(values),
    isomax=np.max(values),
    opacity=0.1,
    surface_count=21,
    colorscale='RdBu'  # 用颜色区分波函数正负区域
))
fig.update_layout(title='1pz原子轨道3D体积图')
fig.show()

关键说明

  • r的取值调整:原子轨道波函数随r增大指数衰减,设置0到4比0到1更能展示轨道的完整形态。
  • 网格创建逻辑:先对theta、phi生成二维网格,再将r扩展维度进行广播运算,避免meshgrid参数顺序导致的维度混乱。
  • 可视化优化:添加colorscale='RdBu'可直观区分波函数的正负区域,契合原子轨道的物理意义。

内容的提问来源于stack exchange,提问作者Hemang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 12:23:35